/* eslint-disable max-len */ class Cell { public value: number; public parentI: number; public parentJ: number; public constructor() { this.value = 0; this.parentI = 0; this.parentJ = 0; } }; export class Aligned { public seq1: string; public seq2: string; public score: number; public constructor(seq1_:string, seq2_:string, score_: number) { this.seq1 = seq1_; this.seq2 = seq2_; this.score = score_; } }; export class SequenceAlignment { private seq1:string =''; private seq2:string =''; private gap:number =1; private len1:number =0; private len2:number =0; private step:number= 1; private alignGrid:Array>=[]; private scores:Array>=[]; private dpGrid:Array>=[]; private connections: {[id:string]:number} = {}; private BLOSUM45:Array> = [[5, -2, -1, -2, -1, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -2, -2, 0, -1, -1, 0, -5], [-2, 7, 0, -1, -3, 1, 0, -2, 0, -3, -2, 3, -1, -2, -2, -1, -1, -2, -1, -2, -1, 0, -1, -5], [-1, 0, 6, 2, -2, 0, 0, 0, 1, -2, -3, 0, -2, -2, -2, 1, 0, -4, -2, -3, 4, 0, -1, -5], [-2, -1, 2, 7, -3, 0, 2, -1, 0, -4, -3, 0, -3, -4, -1, 0, -1, -4, -2, -3, 5, 1, -1, -5], [-1, -3, -2, -3, 12, -3, -3, -3, -3, -3, -2, -3, -2, -2, -4, -1, -1, -5, -3, -1, -2, -3, -2, -5], [-1, 1, 0, 0, -3, 6, 2, -2, 1, -2, -2, 1, 0, -4, -1, 0, -1, -2, -1, -3, 0, 4, -1, -5], [-1, 0, 0, 2, -3, 2, 6, -2, 0, -3, -2, 1, -2, -3, 0, 0, -1, -3, -2, -3, 1, 4, -1, -5], [0, -2, 0, -1, -3, -2, -2, 7, -2, -4, -3, -2, -2, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -5], [-2, 0, 1, 0, -3, 1, 0, -2, 10, -3, -2, -1, 0, -2, -2, -1, -2, -3, 2, -3, 0, 0, -1, -5], [-1, -3, -2, -4, -3, -2, -3, -4, -3, 5, 2, -3, 2, 0, -2, -2, -1, -2, 0, 3, -3, -3, -1, -5], [-1, -2, -3, -3, -2, -2, -2, -3, -2, 2, 5, -3, 2, 1, -3, -3, -1, -2, 0, 1, -3, -2, -1, -5], [-1, 3, 0, 0, -3, 1, 1, -2, -1, -3, -3, 5, -1, -3, -1, -1, -1, -2, -1, -2, 0, 1, -1, -5], [-1, -1, -2, -3, -2, 0, -2, -2, 0, 2, 2, -1, 6, 0, -2, -2, -1, -2, 0, 1, -2, -1, -1, -5], [-2, -2, -2, -4, -2, -4, -3, -3, -2, 0, 1, -3, 0, 8, -3, -2, -1, 1, 3, 0, -3, -3, -1, -5], [-1, -2, -2, -1, -4, -1, 0, -2, -2, -2, -3, -1, -2, -3, 9, -1, -1, -3, -3, -3, -2, -1, -1, -5], [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -3, -1, -2, -2, -1, 4, 2, -4, -2, -1, 0, 0, 0, -5], [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -1, -1, 2, 5, -3, -1, 0, 0, -1, 0, -5], [-2, -2, -4, -4, -5, -2, -3, -2, -3, -2, -2, -2, -2, 1, -3, -4, -3, 15, 3, -3, -4, -2, -2, -5], [-2, -1, -2, -2, -3, -1, -2, -3, 2, 0, 0, -1, 0, 3, -3, -2, -1, 3, 8, -1, -2, -2, -1, -5], [0, -2, -3, -3, -1, -3, -3, -3, -3, 3, 1, -2, 1, 0, -3, -1, 0, -3, -1, 5, -3, -3, -1, -5], [-1, -1, 4, 5, -2, 0, 1, -1, 0, -3, -3, 0, -2, -3, -2, 0, 0, -4, -2, -3, 4, 2, -1, -5], [-1, 0, 0, 1, -3, 4, 4, -2, 0, -3, -2, 1, -1, -3, -1, 0, -1, -2, -2, -3, 2, 4, -1, -5], [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -2, -1, -1, -1, -1, -1, -5], [-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1]]; private BLOSUM50:Array> = [[5, -2, -1, -2, -1, -1, -1, 0, -2, -1, -2, -1, -1, -3, -1, 1, 0, -3, -2, 0, -2, -1, -1, -5], [-2, 7, -1, -2, -4, 1, 0, -3, 0, -4, -3, 3, -2, -3, -3, -1, -1, -3, -1, -3, -1, 0, -1, -5], [-1, -1, 7, 2, -2, 0, 0, 0, 1, -3, -4, 0, -2, -4, -2, 1, 0, -4, -2, -3, 4, 0, -1, -5], [-2, -2, 2, 8, -4, 0, 2, -1, -1, -4, -4, -1, -4, -5, -1, 0, -1, -5, -3, -4, 5, 1, -1, -5], [-1, -4, -2, -4, 13, -3, -3, -3, -3, -2, -2, -3, -2, -2, -4, -1, -1, -5, -3, -1, -3, -3, -2, -5], [-1, 1, 0, 0, -3, 7, 2, -2, 1, -3, -2, 2, 0, -4, -1, 0, -1, -1, -1, -3, 0, 4, -1, -5], [-1, 0, 0, 2, -3, 2, 6, -3, 0, -4, -3, 1, -2, -3, -1, -1, -1, -3, -2, -3, 1, 5, -1, -5], [0, -3, 0, -1, -3, -2, -3, 8, -2, -4, -4, -2, -3, -4, -2, 0, -2, -3, -3, -4, -1, -2, -2, -5], [-2, 0, 1, -1, -3, 1, 0, -2, 10, -4, -3, 0, -1, -1, -2, -1, -2, -3, 2, -4, 0, 0, -1, -5], [-1, -4, -3, -4, -2, -3, -4, -4, -4, 5, 2, -3, 2, 0, -3, -3, -1, -3, -1, 4, -4, -3, -1, -5], [-2, -3, -4, -4, -2, -2, -3, -4, -3, 2, 5, -3, 3, 1, -4, -3, -1, -2, -1, 1, -4, -3, -1, -5], [-1, 3, 0, -1, -3, 2, 1, -2, 0, -3, -3, 6, -2, -4, -1, 0, -1, -3, -2, -3, 0, 1, -1, -5], [-1, -2, -2, -4, -2, 0, -2, -3, -1, 2, 3, -2, 7, 0, -3, -2, -1, -1, 0, 1, -3, -1, -1, -5], [-3, -3, -4, -5, -2, -4, -3, -4, -1, 0, 1, -4, 0, 8, -4, -3, -2, 1, 4, -1, -4, -4, -2, -5], [-1, -3, -2, -1, -4, -1, -1, -2, -2, -3, -4, -1, -3, -4, 10, -1, -1, -4, -3, -3, -2, -1, -2, -5], [1, -1, 1, 0, -1, 0, -1, 0, -1, -3, -3, 0, -2, -3, -1, 5, 2, -4, -2, -2, 0, 0, -1, -5], [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 2, 5, -3, -2, 0, 0, -1, 0, -5], [-3, -3, -4, -5, -5, -1, -3, -3, -3, -3, -2, -3, -1, 1, -4, -4, -3, 15, 2, -3, -5, -2, -3, -5], [-2, -1, -2, -3, -3, -1, -2, -3, 2, -1, -1, -2, 0, 4, -3, -2, -2, 2, 8, -1, -3, -2, -1, -5], [0, -3, -3, -4, -1, -3, -3, -4, -4, 4, 1, -3, 1, -1, -3, -2, 0, -3, -1, 5, -4, -3, -1, -5], [-2, -1, 4, 5, -3, 0, 1, -1, 0, -4, -4, 0, -3, -4, -2, 0, 0, -5, -3, -4, 5, 2, -1, -5], [-1, 0, 0, 1, -3, 4, 5, -2, 0, -3, -3, 1, -1, -4, -1, 0, -1, -2, -2, -3, 2, 5, -1, -5], [-1, -1, -1, -1, -2, -1, -1, -2, -1, -1, -1, -1, -1, -2, -2, -1, 0, -3, -1, -1, -1, -1, -1, -5], [-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1]]; private BLOSUM62:Array> = [[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4], [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4], [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4], [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4], [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4], [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4], [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4], [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4], [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4], [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4], [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4], [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4], [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4], [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4], [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4], [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4], [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4], [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4], [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4], [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4], [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4], [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4], [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4], [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]]; private BLOSUM80:Array> = [[7, -3, -3, -3, -1, -2, -2, 0, -3, -3, -3, -1, -2, -4, -1, 2, 0, -5, -4, -1, -3, -2, -1, -8], [-3, 9, -1, -3, -6, 1, -1, -4, 0, -5, -4, 3, -3, -5, -3, -2, -2, -5, -4, -4, -2, 0, -2, -8], [-3, -1, 9, 2, -5, 0, -1, -1, 1, -6, -6, 0, -4, -6, -4, 1, 0, -7, -4, -5, 5, -1, -2, -8], [-3, -3, 2, 10, -7, -1, 2, -3, -2, -7, -7, -2, -6, -6, -3, -1, -2, -8, -6, -6, 6, 1, -3, -8], [-1, -6, -5, -7, 13, -5, -7, -6, -7, -2, -3, -6, -3, -4, -6, -2, -2, -5, -5, -2, -6, -7, -4, -8], [-2, 1, 0, -1, -5, 9, 3, -4, 1, -5, -4, 2, -1, -5, -3, -1, -1, -4, -3, -4, -1, 5, -2, -8], [-2, -1, -1, 2, -7, 3, 8, -4, 0, -6, -6, 1, -4, -6, -2, -1, -2, -6, -5, -4, 1, 6, -2, -8], [0, -4, -1, -3, -6, -4, -4, 9, -4, -7, -7, -3, -5, -6, -5, -1, -3, -6, -6, -6, -2, -4, -3, -8], [-3, 0, 1, -2, -7, 1, 0, -4, 12, -6, -5, -1, -4, -2, -4, -2, -3, -4, 3, -5, -1, 0, -2, -8], [-3, -5, -6, -7, -2, -5, -6, -7, -6, 7, 2, -5, 2, -1, -5, -4, -2, -5, -3, 4, -6, -6, -2, -8], [-3, -4, -6, -7, -3, -4, -6, -7, -5, 2, 6, -4, 3, 0, -5, -4, -3, -4, -2, 1, -7, -5, -2, -8], [-1, 3, 0, -2, -6, 2, 1, -3, -1, -5, -4, 8, -3, -5, -2, -1, -1, -6, -4, -4, -1, 1, -2, -8], [-2, -3, -4, -6, -3, -1, -4, -5, -4, 2, 3, -3, 9, 0, -4, -3, -1, -3, -3, 1, -5, -3, -2, -8], [-4, -5, -6, -6, -4, -5, -6, -6, -2, -1, 0, -5, 0, 10, -6, -4, -4, 0, 4, -2, -6, -6, -3, -8], [-1, -3, -4, -3, -6, -3, -2, -5, -4, -5, -5, -2, -4, -6, 12, -2, -3, -7, -6, -4, -4, -2, -3, -8], [2, -2, 1, -1, -2, -1, -1, -1, -2, -4, -4, -1, -3, -4, -2, 7, 2, -6, -3, -3, 0, -1, -1, -8], [0, -2, 0, -2, -2, -1, -2, -3, -3, -2, -3, -1, -1, -4, -3, 2, 8, -5, -3, 0, -1, -2, -1, -8], [-5, -5, -7, -8, -5, -4, -6, -6, -4, -5, -4, -6, -3, 0, -7, -6, -5, 16, 3, -5, -8, -5, -5, -8], [-4, -4, -4, -6, -5, -3, -5, -6, 3, -3, -2, -4, -3, 4, -6, -3, -3, 3, 11, -3, -5, -4, -3, -8], [-1, -4, -5, -6, -2, -4, -4, -6, -5, 4, 1, -4, 1, -2, -4, -3, 0, -5, -3, 7, -6, -4, -2, -8], [-3, -2, 5, 6, -6, -1, 1, -2, -1, -6, -7, -1, -5, -6, -4, 0, -1, -8, -5, -6, 6, 0, -3, -8], [-2, 0, -1, 1, -7, 5, 6, -4, 0, -6, -5, 1, -3, -6, -2, -1, -2, -5, -4, -4, 0, 6, -1, -8], [-1, -2, -2, -3, -4, -2, -2, -3, -2, -2, -2, -2, -2, -3, -3, -1, -1, -5, -3, -2, -3, -1, -2, -8], [-8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1]]; private BLOSUM90:Array> = [[5, -2, -2, -3, -1, -1, -1, 0, -2, -2, -2, -1, -2, -3, -1, 1, 0, -4, -3, -1, -2, -1, -1, -6], [-2, 6, -1, -3, -5, 1, -1, -3, 0, -4, -3, 2, -2, -4, -3, -1, -2, -4, -3, -3, -2, 0, -2, -6], [-2, -1, 7, 1, -4, 0, -1, -1, 0, -4, -4, 0, -3, -4, -3, 0, 0, -5, -3, -4, 4, -1, -2, -6], [-3, -3, 1, 7, -5, -1, 1, -2, -2, -5, -5, -1, -4, -5, -3, -1, -2, -6, -4, -5, 4, 0, -2, -6], [-1, -5, -4, -5, 9, -4, -6, -4, -5, -2, -2, -4, -2, -3, -4, -2, -2, -4, -4, -2, -4, -5, -3, -6], [-1, 1, 0, -1, -4, 7, 2, -3, 1, -4, -3, 1, 0, -4, -2, -1, -1, -3, -3, -3, -1, 4, -1, -6], [-1, -1, -1, 1, -6, 2, 6, -3, -1, -4, -4, 0, -3, -5, -2, -1, -1, -5, -4, -3, 0, 4, -2, -6], [0, -3, -1, -2, -4, -3, -3, 6, -3, -5, -5, -2, -4, -5, -3, -1, -3, -4, -5, -5, -2, -3, -2, -6], [-2, 0, 0, -2, -5, 1, -1, -3, 8, -4, -4, -1, -3, -2, -3, -2, -2, -3, 1, -4, -1, 0, -2, -6], [-2, -4, -4, -5, -2, -4, -4, -5, -4, 5, 1, -4, 1, -1, -4, -3, -1, -4, -2, 3, -5, -4, -2, -6], [-2, -3, -4, -5, -2, -3, -4, -5, -4, 1, 5, -3, 2, 0, -4, -3, -2, -3, -2, 0, -5, -4, -2, -6], [-1, 2, 0, -1, -4, 1, 0, -2, -1, -4, -3, 6, -2, -4, -2, -1, -1, -5, -3, -3, -1, 1, -1, -6], [-2, -2, -3, -4, -2, 0, -3, -4, -3, 1, 2, -2, 7, -1, -3, -2, -1, -2, -2, 0, -4, -2, -1, -6], [-3, -4, -4, -5, -3, -4, -5, -5, -2, -1, 0, -4, -1, 7, -4, -3, -3, 0, 3, -2, -4, -4, -2, -6], [-1, -3, -3, -3, -4, -2, -2, -3, -3, -4, -4, -2, -3, -4, 8, -2, -2, -5, -4, -3, -3, -2, -2, -6], [1, -1, 0, -1, -2, -1, -1, -1, -2, -3, -3, -1, -2, -3, -2, 5, 1, -4, -3, -2, 0, -1, -1, -6], [0, -2, 0, -2, -2, -1, -1, -3, -2, -1, -2, -1, -1, -3, -2, 1, 6, -4, -2, -1, -1, -1, -1, -6], [-4, -4, -5, -6, -4, -3, -5, -4, -3, -4, -3, -5, -2, 0, -5, -4, -4, 11, 2, -3, -6, -4, -3, -6], [-3, -3, -3, -4, -4, -3, -4, -5, 1, -2, -2, -3, -2, 3, -4, -3, -2, 2, 8, -3, -4, -3, -2, -6], [-1, -3, -4, -5, -2, -3, -3, -5, -4, 3, 0, -3, 0, -2, -3, -2, -1, -3, -3, 5, -4, -3, -2, -6], [-2, -2, 4, 4, -4, -1, 0, -2, -1, -5, -5, -1, -4, -4, -3, 0, -1, -6, -4, -4, 4, 0, -2, -6], [-1, 0, -1, 0, -5, 4, 4, -3, 0, -4, -4, 1, -2, -4, -2, -1, -1, -4, -3, -3, 0, 4, -1, -6], [-1, -2, -2, -2, -3, -1, -2, -2, -2, -2, -2, -1, -1, -2, -2, -1, -1, -3, -2, -2, -2, -1, -2, -6], [-6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 1]]; private NUCLEOTIDES: Array> = [[1, -1, -1, -1], [-1, 1, -1, -1], [-1, -1, 1, -1], [-1, -1, -1, 1]]; private PAM30: Array> = [[6, -7, -4, -3, -6, -4, -2, -2, -7, -5, -6, -7, -5, -8, -2, 0, -1, -13, -8, -2, -3, -3, -3, -17], [-7, 8, -6, -10, -8, -2, -9, -9, -2, -5, -8, 0, -4, -9, -4, -3, -6, -2, -10, -8, -7, -4, -6, -17], [-4, -6, 8, 2, -11, -3, -2, -3, 0, -5, -7, -1, -9, -9, -6, 0, -2, -8, -4, -8, 6, -3, -3, -17], [-3, -10, 2, 8, -14, -2, 2, -3, -4, -7, -12, -4, -11, -15, -8, -4, -5, -15, -11, -8, 6, 1, -5, -17], [-6, -8, -11, -14, 10, -14, -14, -9, -7, -6, -15, -14, -13, -13, -8, -3, -8, -15, -4, -6, -12, -14, -9, -17], [-4, -2, -3, -2, -14, 8, 1, -7, 1, -8, -5, -3, -4, -13, -3, -5, -5, -13, -12, -7, -3, 6, -5, -17], [-2, -9, -2, 2, -14, 1, 8, -4, -5, -5, -9, -4, -7, -14, -5, -4, -6, -17, -8, -6, 1, 6, -5, -17], [-2, -9, -3, -3, -9, -7, -4, 6, -9, -11, -10, -7, -8, -9, -6, -2, -6, -15, -14, -5, -3, -5, -5, -17], [-7, -2, 0, -4, -7, 1, -5, -9, 9, -9, -6, -6, -10, -6, -4, -6, -7, -7, -3, -6, -1, -1, -5, -17], [-5, -5, -5, -7, -6, -8, -5, -11, -9, 8, -1, -6, -1, -2, -8, -7, -2, -14, -6, 2, -6, -6, -5, -17], [-6, -8, -7, -12, -15, -5, -9, -10, -6, -1, 7, -8, 1, -3, -7, -8, -7, -6, -7, -2, -9, -7, -6, -17], [-7, 0, -1, -4, -14, -3, -4, -7, -6, -6, -8, 7, -2, -14, -6, -4, -3, -12, -9, -9, -2, -4, -5, -17], [-5, -4, -9, -11, -13, -4, -7, -8, -10, -1, 1, -2, 11, -4, -8, -5, -4, -13, -11, -1, -10, -5, -5, -17], [-8, -9, -9, -15, -13, -13, -14, -9, -6, -2, -3, -14, -4, 9, -10, -6, -9, -4, 2, -8, -10, -13, -8, -17], [-2, -4, -6, -8, -8, -3, -5, -6, -4, -8, -7, -6, -8, -10, 8, -2, -4, -14, -13, -6, -7, -4, -5, -17], [0, -3, 0, -4, -3, -5, -4, -2, -6, -7, -8, -4, -5, -6, -2, 6, 0, -5, -7, -6, -1, -5, -3, -17], [-1, -6, -2, -5, -8, -5, -6, -6, -7, -2, -7, -3, -4, -9, -4, 0, 7, -13, -6, -3, -3, -6, -4, -17], [-13, -2, -8, -15, -15, -13, -17, -15, -7, -14, -6, -12, -13, -4, -14, -5, -13, 13, -5, -15, -10, -14, -11, -17], [-8, -10, -4, -11, -4, -12, -8, -14, -3, -6, -7, -9, -11, 2, -13, -7, -6, -5, 10, -7, -6, -9, -7, -17], [-2, -8, -8, -8, -6, -7, -6, -5, -6, 2, -2, -9, -1, -8, -6, -6, -3, -15, -7, 7, -8, -6, -5, -17], [-3, -7, 6, 6, -12, -3, 1, -3, -1, -6, -9, -2, -10, -10, -7, -1, -3, -10, -6, -8, 6, 0, -5, -17], [-3, -4, -3, 1, -14, 6, 6, -5, -1, -6, -7, -4, -5, -13, -4, -5, -6, -14, -9, -6, 0, 6, -5, -17], [-3, -6, -3, -5, -9, -5, -5, -5, -5, -5, -6, -5, -5, -8, -5, -3, -4, -11, -7, -5, -5, -5, -5, -17], [-17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 1]]; private PAM70:Array> = [[5, -4, -2, -1, -4, -2, -1, 0, -4, -2, -4, -4, -3, -6, 0, 1, 1, -9, -5, -1, -1, -1, -2, -11], [-4, 8, -3, -6, -5, 0, -5, -6, 0, -3, -6, 2, -2, -7, -2, -1, -4, 0, -7, -5, -4, -2, -3, -11], [-2, -3, 6, 3, -7, -1, 0, -1, 1, -3, -5, 0, -5, -6, -3, 1, 0, -6, -3, -5, 5, -1, -2, -11], [-1, -6, 3, 6, -9, 0, 3, -1, -1, -5, -8, -2, -7, -10, -4, -1, -2, -10, -7, -5, 5, 2, -3, -11], [-4, -5, -7, -9, 9, -9, -9, -6, -5, -4, -10, -9, -9, -8, -5, -1, -5, -11, -2, -4, -8, -9, -6, -11], [-2, 0, -1, 0, -9, 7, 2, -4, 2, -5, -3, -1, -2, -9, -1, -3, -3, -8, -8, -4, -1, 5, -2, -11], [-1, -5, 0, 3, -9, 2, 6, -2, -2, -4, -6, -2, -4, -9, -3, -2, -3, -11, -6, -4, 2, 5, -3, -11], [0, -6, -1, -1, -6, -4, -2, 6, -6, -6, -7, -5, -6, -7, -3, 0, -3, -10, -9, -3, -1, -3, -3, -11], [-4, 0, 1, -1, -5, 2, -2, -6, 8, -6, -4, -3, -6, -4, -2, -3, -4, -5, -1, -4, 0, 1, -3, -11], [-2, -3, -3, -5, -4, -5, -4, -6, -6, 7, 1, -4, 1, 0, -5, -4, -1, -9, -4, 3, -4, -4, -3, -11], [-4, -6, -5, -8, -10, -3, -6, -7, -4, 1, 6, -5, 2, -1, -5, -6, -4, -4, -4, 0, -6, -4, -4, -11], [-4, 2, 0, -2, -9, -1, -2, -5, -3, -4, -5, 6, 0, -9, -4, -2, -1, -7, -7, -6, -1, -2, -3, -11], [-3, -2, -5, -7, -9, -2, -4, -6, -6, 1, 2, 0, 10, -2, -5, -3, -2, -8, -7, 0, -6, -3, -3, -11], [-6, -7, -6, -10, -8, -9, -9, -7, -4, 0, -1, -9, -2, 8, -7, -4, -6, -2, 4, -5, -7, -9, -5, -11], [0, -2, -3, -4, -5, -1, -3, -3, -2, -5, -5, -4, -5, -7, 7, 0, -2, -9, -9, -3, -4, -2, -3, -11], [1, -1, 1, -1, -1, -3, -2, 0, -3, -4, -6, -2, -3, -4, 0, 5, 2, -3, -5, -3, 0, -2, -1, -11], [1, -4, 0, -2, -5, -3, -3, -3, -4, -1, -4, -1, -2, -6, -2, 2, 6, -8, -4, -1, -1, -3, -2, -11], [-9, 0, -6, -10, -11, -8, -11, -10, -5, -9, -4, -7, -8, -2, -9, -3, -8, 13, -3, -10, -7, -10, -7, -11], [-5, -7, -3, -7, -2, -8, -6, -9, -1, -4, -4, -7, -7, 4, -9, -5, -4, -3, 9, -5, -4, -7, -5, -11], [-1, -5, -5, -5, -4, -4, -4, -3, -4, 3, 0, -6, 0, -5, -3, -3, -1, -10, -5, 6, -5, -4, -2, -11], [-1, -4, 5, 5, -8, -1, 2, -1, 0, -4, -6, -1, -6, -7, -4, 0, -1, -7, -4, -5, 5, 1, -2, -11], [-1, -2, -1, 2, -9, 5, 5, -3, 1, -4, -4, -2, -3, -9, -2, -2, -3, -10, -7, -4, 1, 5, -3, -11], [-2, -3, -2, -3, -6, -2, -3, -3, -3, -3, -4, -3, -3, -5, -3, -1, -2, -7, -5, -2, -2, -3, -3, -11], [-11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 1]]; private PAM250:Array> = [[2, -2, 0, 0, -2, 0, 0, 1, -1, -1, -2, -1, -1, -3, 1, 1, 1, -6, -3, 0, 0, 0, 0, -8], [-2, 6, 0, -1, -4, 1, -1, -3, 2, -2, -3, 3, 0, -4, 0, 0, -1, 2, -4, -2, -1, 0, -1, -8], [0, 0, 2, 2, -4, 1, 1, 0, 2, -2, -3, 1, -2, -3, 0, 1, 0, -4, -2, -2, 2, 1, 0, -8], [0, -1, 2, 4, -5, 2, 3, 1, 1, -2, -4, 0, -3, -6, -1, 0, 0, -7, -4, -2, 3, 3, -1, -8], [-2, -4, -4, -5, 12, -5, -5, -3, -3, -2, -6, -5, -5, -4, -3, 0, -2, -8, 0, -2, -4, -5, -3, -8], [0, 1, 1, 2, -5, 4, 2, -1, 3, -2, -2, 1, -1, -5, 0, -1, -1, -5, -4, -2, 1, 3, -1, -8], [0, -1, 1, 3, -5, 2, 4, 0, 1, -2, -3, 0, -2, -5, -1, 0, 0, -7, -4, -2, 3, 3, -1, -8], [1, -3, 0, 1, -3, -1, 0, 5, -2, -3, -4, -2, -3, -5, 0, 1, 0, -7, -5, -1, 0, 0, -1, -8], [-1, 2, 2, 1, -3, 3, 1, -2, 6, -2, -2, 0, -2, -2, 0, -1, -1, -3, 0, -2, 1, 2, -1, -8], [-1, -2, -2, -2, -2, -2, -2, -3, -2, 5, 2, -2, 2, 1, -2, -1, 0, -5, -1, 4, -2, -2, -1, -8], [-2, -3, -3, -4, -6, -2, -3, -4, -2, 2, 6, -3, 4, 2, -3, -3, -2, -2, -1, 2, -3, -3, -1, -8], [-1, 3, 1, 0, -5, 1, 0, -2, 0, -2, -3, 5, 0, -5, -1, 0, 0, -3, -4, -2, 1, 0, -1, -8], [-1, 0, -2, -3, -5, -1, -2, -3, -2, 2, 4, 0, 6, 0, -2, -2, -1, -4, -2, 2, -2, -2, -1, -8], [-3, -4, -3, -6, -4, -5, -5, -5, -2, 1, 2, -5, 0, 9, -5, -3, -3, 0, 7, -1, -4, -5, -2, -8], [1, 0, 0, -1, -3, 0, -1, 0, 0, -2, -3, -1, -2, -5, 6, 1, 0, -6, -5, -1, -1, 0, -1, -8], [1, 0, 1, 0, 0, -1, 0, 1, -1, -1, -3, 0, -2, -3, 1, 2, 1, -2, -3, -1, 0, 0, 0, -8], [1, -1, 0, 0, -2, -1, 0, 0, -1, 0, -2, 0, -1, -3, 0, 1, 3, -5, -3, 0, 0, -1, 0, -8], [-6, 2, -4, -7, -8, -5, -7, -7, -3, -5, -2, -3, -4, 0, -6, -2, -5, 17, 0, -6, -5, -6, -4, -8], [-3, -4, -2, -4, 0, -4, -4, -5, 0, -1, -1, -4, -2, 7, -5, -3, -3, 0, 10, -2, -3, -4, -2, -8], [0, -2, -2, -2, -2, -2, -2, -1, -2, 4, 2, -2, 2, -1, -1, -1, 0, -6, -2, 4, -2, -2, -1, -8], [0, -1, 2, 3, -4, 1, 3, 0, 1, -2, -3, 1, -2, -4, -1, 0, 0, -5, -3, -2, 3, 2, -1, -8], [0, 0, 1, 3, -5, 3, 3, 0, 2, -2, -3, 0, -2, -5, 0, 0, -1, -6, -4, -2, 2, 3, -1, -8], [0, -1, 0, -1, -3, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0, 0, -4, -2, -1, -1, -1, -1, -8], [-8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1]]; private SCHNEIDER :Array> = [[11.6, -2.7, 9.7, -1.7, -2.7, -6.4, -3.9, -5.6, 5.1, -5.0, 3.6, -4.2, -6.3, -13.0, -7.1, -11.5, 0.4, -6.0, -1.9, -5.3, -8.5, -11.2, -8.9, -10.8, 2.1, 0.0, 1.4, 0.2, -10.2, -13.5, -13.0, -12.5, -2.6, -8.5, -5.0, -8.1, -6.3, -9.9, -7.5, -9.0, -7.1, -10.2, -8.2, -9.2, -8.2, -12.5, -11.1, -11.4, -50.0, -14.8, -50.0, -13.8, -7.3, -10.1, -8.4, -9.1, -50.0, -13.0, -13.5, -12.4, -10.7, -18.1, -11.8, -17.2], [-2.7, 13.0, -3.3, 10.9, -3.5, -0.4, -3.3, -1.8, -5.4, 4.6, -5.5, 3.0, -10.2, -7.9, -9.9, -9.6, -5.0, 0.5, -5.5, -1.0, -10.3, -8.1, -9.4, -9.6, -8.1, -5.0, -7.3, -6.3, -13.4, -11.3, -14.4, -12.9, -6.3, 0.8, -6.4, -1.1, -7.4, -5.0, -6.2, -6.5, -5.6, -1.6, -4.7, -3.0, -10.8, -8.7, -11.9, -10.0, -50.0, -6.2, -50.0, -7.5, -6.3, -4.3, -6.2, -5.4, -50.0, -7.0, -16.3, -8.2, -13.2, -12.3, -13.1, -13.3], [9.7, -3.3, 11.6, -2.8, -4.5, -6.7, -3.1, -6.9, 3.3, -5.5, 4.8, -5.1, -8.9, -13.2, -5.7, -12.6, -1.5, -6.1, -0.6, -6.1, -10.0, -11.8, -8.6, -11.9, 1.2, 0.5, 2.2, 0.1, -11.8, -14.0, -11.9, -13.4, -4.9, -9.1, -3.4, -8.9, -8.0, -10.0, -7.2, -10.0, -9.1, -10.2, -7.1, -9.9, -10.1, -13.0, -10.6, -12.7, -50.0, -14.9, -50.0, -14.4, -8.9, -10.8, -8.9, -10.4, -50.0, -13.1, -11.8, -13.0, -12.4, -19.4, -11.5, -17.8], [-1.7, 10.9, -2.8, 12.9, -2.7, -2.2, -2.8, 0.2, -4.8, 2.9, -5.2, 5.2, -9.1, -9.5, -9.0, -7.0, -4.0, -1.0, -5.0, 1.0, -9.0, -8.8, -8.9, -7.7, -7.0, -6.8, -7.1, -4.3, -12.4, -12.9, -13.9, -10.0, -4.9, -0.7, -5.6, 1.4, -6.0, -6.5, -6.2, -4.8, -5.1, -3.2, -5.0, -1.2, -9.8, -9.9, -11.3, -8.2, -50.0, -7.6, -50.0, -5.1, -5.5, -5.8, -5.9, -4.2, -50.0, -8.3, -15.5, -5.9, -11.6, -14.2, -12.0, -11.6], [-2.7, -3.5, -4.5, -2.7, 11.7, 9.0, 10.6, 9.6, -3.2, -0.7, -5.1, -0.4, 0.7, -4.6, -0.4, -3.6, -4.8, -8.9, -6.5, -7.8, -1.4, -4.1, -2.9, -3.3, -8.0, -9.1, -8.0, -8.2, -6.0, -9.3, -7.7, -8.5, -6.4, -10.1, -7.5, -8.6, 2.8, -0.7, 0.9, 0.1, -5.9, -7.3, -6.5, -6.5, -0.4, -3.9, -2.6, -3.1, -50.0, -14.6, -50.0, -12.6, 2.9, 0.1, 1.8, 1.0, -50.0, -9.2, -13.6, -7.7, -4.8, -12.2, -6.2, -11.0], [-6.4, -0.4, -6.7, -2.2, 9.0, 12.3, 9.8, 9.6, -7.1, 2.4, -7.2, 0.3, -2.9, -1.2, -3.0, -3.3, -7.6, -6.7, -8.1, -7.9, -4.9, -1.9, -4.5, -3.8, -9.5, -7.8, -9.3, -8.9, -9.4, -7.1, -9.0, -9.0, -9.4, -7.5, -9.3, -9.2, -0.7, 2.6, 0.2, -0.1, -8.0, -4.6, -7.7, -6.1, -3.6, -1.0, -4.1, -3.1, -50.0, -11.6, -50.0, -11.6, 0.2, 2.3, 0.4, 0.5, -50.0, -6.5, -15.3, -7.8, -8.4, -9.5, -8.3, -11.1], [-3.9, -3.3, -3.1, -2.8, 10.6, 9.8, 12.2, 9.8, -4.9, 0.1, -3.6, -0.2, -1.7, -4.1, 0.9, -3.5, -5.9, -8.9, -5.6, -8.5, -3.9, -3.9, -2.2, -4.5, -7.3, -7.5, -6.4, -8.5, -7.1, -8.2, -6.7, -7.8, -7.9, -9.1, -7.1, -9.4, 0.9, -0.2, 2.5, -0.3, -6.9, -6.5, -5.5, -6.8, -1.7, -3.4, -1.7, -2.8, -50.0, -13.0, -50.0, -11.5, 1.5, 0.7, 2.7, 0.6, -50.0, -8.9, -12.1, -7.4, -6.1, -11.5, -5.4, -10.4], [-5.6, -1.8, -6.9, 0.2, 9.6, 9.6, 9.8, 11.6, -6.6, 0.9, -7.2, 2.5, -2.3, -3.4, -2.3, -0.6, -6.5, -8.2, -8.0, -6.3, -3.7, -3.5, -3.9, -1.6, -9.9, -8.9, -9.6, -7.0, -8.6, -8.9, -8.8, -6.8, -8.6, -8.2, -8.8, -6.8, 0.3, 0.1, 0.2, 2.4, -7.4, -6.2, -6.9, -4.4, -2.9, -2.9, -3.5, -0.9, -50.0, -12.2, -50.0, -10.1, 1.2, 0.6, 1.2, 2.4, -50.0, -7.6, -16.1, -5.8, -7.2, -10.8, -7.4, -9.0], [5.1, -5.4, 3.3, -4.8, -3.2, -7.1, -4.9, -6.6, 13.3, -2.8, 11.2, -1.9, -5.7, -12.5, -7.2, -11.6, -0.7, -4.8, -3.1, -4.3, -10.0, -11.6, -8.8, -11.7, 10.5, 7.7, 9.1, 8.5, -9.8, -12.7, -11.7, -11.8, -6.3, -11.4, -8.8, -11.0, -7.5, -10.3, -8.3, -9.9, -1.9, -6.7, -4.1, -6.4, -7.9, -12.5, -11.4, -11.7, -50.0, -14.0, -50.0, -13.2, -8.5, -10.4, -9.1, -9.6, -50.0, -9.8, -7.7, -8.8, -10.3, -17.9, -11.8, -16.0], [-5.0, 4.6, -5.5, 2.9, -0.7, 2.4, 0.1, 0.9, -2.8, 12.8, -2.6, 11.0, -8.4, -6.3, -8.3, -7.7, -6.1, -2.9, -6.5, -4.2, -8.5, -5.9, -7.5, -7.7, -5.5, -2.4, -5.5, -4.1, -12.9, -10.3, -12.7, -11.3, -7.4, -3.1, -7.4, -4.9, -4.4, -1.8, -3.5, -3.5, -1.6, 3.0, -0.8, 0.9, -8.4, -6.3, -9.6, -7.3, -50.0, -9.0, -50.0, -9.7, -2.3, -0.2, -1.2, -1.5, -50.0, -0.7, -13.3, -2.0, -11.8, -11.9, -12.3, -12.7], [3.6, -5.5, 4.8, -5.2, -5.1, -7.2, -3.6, -7.2, 11.2, -2.6, 13.4, -2.1, -7.7, -12.5, -5.3, -11.9, -2.2, -4.4, -1.9, -4.8, -10.2, -11.5, -8.1, -12.0, 9.3, 8.2, 10.0, 8.0, -10.8, -11.9, -10.7, -12.4, -8.2, -11.8, -6.9, -11.5, -8.4, -9.9, -7.1, -10.6, -4.7, -6.8, -1.2, -7.0, -9.8, -11.6, -9.6, -12.1, -50.0, -14.1, -50.0, -12.7, -10.0, -10.8, -8.8, -10.5, -50.0, -9.2, -4.2, -9.3, -11.0, -18.2, -11.1, -16.1], [-4.2, 3.0, -5.1, 5.2, -0.4, 0.3, -0.2, 2.5, -1.9, 11.0, -2.1, 13.2, -7.6, -8.5, -8.0, -5.3, -5.6, -4.5, -6.8, -2.4, -7.8, -7.9, -7.9, -6.2, -5.7, -5.1, -5.4, -2.1, -12.4, -12.3, -13.1, -10.1, -6.6, -4.4, -6.9, -2.6, -3.6, -3.8, -3.7, -2.0, -1.4, 0.8, -0.9, 3.0, -8.2, -8.1, -9.2, -5.8, -50.0, -10.1, -50.0, -7.4, -1.7, -2.0, -1.5, -0.5, -50.0, -2.1, -12.6, -0.4, -11.6, -13.9, -11.4, -11.1], [-6.3, -10.2, -8.9, -9.1, 0.7, -2.9, -1.7, -2.3, -5.7, -8.4, -7.7, -7.6, 13.2, 9.6, 3.5, 9.7, -8.7, -12.4, -10.7, -10.7, -7.8, -10.2, -8.8, -9.6, -9.5, -11.9, -10.9, -10.5, 2.3, -0.4, -0.2, -0.3, -9.7, -15.5, -11.4, -13.7, -3.0, -6.4, -4.1, -5.4, -9.6, -11.9, -10.5, -11.8, 6.2, 3.3, 3.7, 3.6, -50.0, -13.6, -50.0, -11.9, -5.6, -8.8, -7.2, -8.9, -50.0, -12.4, -14.1, -11.6, 2.8, -6.4, 0.5, -5.2], [-13.0, -7.9, -13.2, -9.5, -4.6, -1.2, -4.1, -3.4, -12.5, -6.3, -12.5, -8.5, 9.6, 12.7, 0.2, 10.5, -12.4, -11.6, -13.2, -12.0, -12.4, -10.1, -11.6, -12.0, -15.1, -13.1, -14.3, -13.4, -1.4, 1.4, -1.6, -0.5, -14.9, -14.3, -15.2, -16.8, -7.7, -4.7, -6.3, -6.6, -14.6, -10.8, -12.8, -13.0, 2.3, 6.0, 2.5, 3.6, -50.0, -11.2, -50.0, -11.9, -10.5, -9.2, -10.5, -10.5, -50.0, -10.3, -16.2, -11.3, -1.7, -3.7, -2.5, -5.4], [-7.1, -9.9, -5.7, -9.0, -0.4, -3.0, 0.9, -2.3, -7.2, -8.3, -5.3, -8.0, 3.5, 0.2, 14.3, 1.0, -7.3, -11.2, -6.9, -9.7, -8.5, -10.2, -7.7, -9.8, -10.0, -10.4, -8.4, -10.2, 1.0, -0.6, 1.7, -0.5, -11.1, -14.8, -9.7, -14.5, -3.7, -5.8, -3.1, -5.6, -10.4, -11.5, -8.2, -11.1, 0.6, -1.6, 1.6, -1.1, -50.0, -12.4, -50.0, -11.5, -5.5, -8.0, -4.9, -7.2, -50.0, -12.4, -10.3, -11.6, 0.7, -6.8, 2.4, -6.0], [-11.5, -9.6, -12.6, -7.0, -3.6, -3.3, -3.5, -0.6, -11.6, -7.7, -11.9, -5.3, 9.7, 10.5, 1.0, 12.6, -12.0, -12.2, -12.5, -9.7, -11.1, -11.2, -11.9, -9.4, -12.9, -14.3, -14.0, -11.9, -1.0, -0.4, -1.6, 1.2, -13.9, -15.4, -13.7, -12.6, -6.2, -6.7, -6.3, -4.4, -13.0, -12.2, -13.0, -10.4, 2.9, 3.8, 2.5, 5.8, -50.0, -12.5, -50.0, -10.2, -9.6, -9.7, -9.6, -8.3, -50.0, -11.6, -15.4, -9.4, -1.1, -5.4, -1.6, -3.3], [0.4, -5.0, -1.5, -4.0, -4.8, -7.6, -5.9, -6.5, -0.7, -6.1, -2.2, -5.6, -8.7, -12.4, -7.3, -12.0, 12.8, 2.3, 10.2, 3.0, 0.0, -3.4, -0.7, -3.2, 2.5, -0.8, 0.9, 0.2, -3.0, -7.2, -5.7, -6.1, -0.2, -6.6, -1.8, -6.0, -5.3, -8.2, -5.7, -7.6, -6.7, -9.6, -7.5, -9.3, -7.1, -10.5, -9.6, -9.4, -50.0, -8.1, -50.0, -7.2, -4.3, -6.8, -5.7, -6.3, -50.0, -9.5, -9.6, -8.9, -6.2, -12.8, -6.8, -11.8], [-6.0, 0.5, -6.1, -1.0, -8.9, -6.7, -8.9, -8.2, -4.8, -2.9, -4.4, -4.5, -12.4, -11.6, -11.2, -12.2, 2.3, 14.6, 1.9, 12.9, -5.5, -2.6, -4.1, -4.7, -1.2, 3.0, -1.1, 1.6, -8.0, -4.7, -8.7, -6.0, -8.2, -4.7, -7.8, -6.7, -10.0, -8.3, -8.9, -9.9, -10.8, -7.1, -10.0, -9.2, -11.6, -10.1, -12.3, -11.9, -50.0, 2.2, -50.0, 0.9, -7.9, -5.9, -7.4, -6.9, -50.0, -4.6, -11.6, -5.6, -9.7, -5.9, -9.9, -7.3], [-1.9, -5.5, -0.6, -5.0, -6.5, -8.1, -5.6, -8.0, -3.1, -6.5, -1.9, -6.8, -10.7, -13.2, -6.9, -12.5, 10.2, 1.9, 11.9, 2.1, -2.3, -4.1, -0.5, -4.6, -0.1, -0.9, 2.4, -0.8, -5.1, -6.9, -4.8, -6.7, -2.3, -7.1, -0.8, -7.2, -7.2, -8.0, -5.6, -8.5, -9.4, -9.7, -7.2, -9.8, -9.2, -11.1, -9.5, -10.7, -50.0, -8.7, -50.0, -8.6, -6.1, -7.5, -5.5, -7.7, -50.0, -10.4, -7.7, -10.0, -7.3, -13.6, -6.4, -13.3], [-5.3, -1.0, -6.1, 1.0, -7.8, -7.9, -8.5, -6.3, -4.3, -4.2, -4.8, -2.4, -10.7, -12.0, -9.7, -9.7, 3.0, 12.9, 2.1, 14.7, -4.9, -3.8, -4.0, -2.4, -1.0, 0.8, -1.3, 3.4, -7.6, -5.7, -8.1, -3.5, -6.8, -5.8, -7.2, -4.2, -8.9, -10.2, -8.4, -8.2, -9.9, -8.4, -9.7, -6.4, -11.1, -11.1, -11.8, -10.0, -50.0, 0.4, -50.0, 2.6, -7.2, -7.0, -7.4, -5.1, -50.0, -5.7, -9.8, -3.2, -8.4, -7.4, -8.9, -5.9], [-8.5, -10.3, -10.0, -9.0, -1.4, -4.9, -3.9, -3.7, -10.0, -8.5, -10.2, -7.8, -7.8, -12.4, -8.5, -11.1, 0.0, -5.5, -2.3, -4.9, 12.6, 10.0, 11.1, 10.5, -6.0, -8.3, -6.9, -7.5, -2.2, -7.4, -5.3, -5.9, -8.9, -12.5, -9.4, -11.6, -0.7, -3.9, -2.3, -3.0, -9.1, -9.8, -9.2, -9.5, -5.6, -9.0, -8.0, -8.5, -50.0, -15.3, -50.0, -14.1, 2.3, -1.4, 0.3, -0.5, -50.0, -13.6, -14.3, -11.5, -5.3, -13.7, -6.1, -12.7], [-11.2, -8.1, -11.8, -8.8, -4.1, -1.9, -3.9, -3.5, -11.6, -5.9, -11.5, -7.9, -10.2, -10.1, -10.2, -11.2, -3.4, -2.6, -4.1, -3.8, 10.0, 13.1, 10.7, 10.6, -8.1, -5.2, -8.0, -6.7, -6.1, -3.7, -7.5, -5.6, -11.1, -10.3, -10.6, -11.9, -3.2, -1.0, -2.2, -2.8, -10.5, -8.1, -9.4, -9.5, -8.3, -6.9, -9.4, -8.8, -50.0, -11.3, -50.0, -12.8, -0.6, 2.2, -0.3, 0.1, -50.0, -10.1, -17.5, -11.1, -8.6, -9.9, -8.6, -11.9], [-8.9, -9.4, -8.6, -8.9, -2.9, -4.5, -2.2, -3.9, -8.8, -7.5, -8.1, -7.9, -8.8, -11.6, -7.7, -11.9, -0.7, -4.1, -0.5, -4.0, 11.1, 10.7, 13.2, 10.4, -5.7, -5.8, -3.5, -6.1, -3.6, -6.5, -3.3, -5.5, -9.4, -11.0, -8.7, -11.2, -1.8, -2.7, 0.7, -3.0, -9.1, -8.2, -7.3, -9.4, -7.2, -8.2, -7.2, -8.2, -50.0, -13.2, -50.0, -13.3, 0.5, -0.9, 1.8, -0.6, -50.0, -11.4, -11.1, -10.5, -6.1, -12.9, -5.0, -11.9], [-10.8, -9.6, -11.9, -7.7, -3.3, -3.8, -4.5, -1.6, -11.7, -7.7, -12.0, -6.2, -9.6, -12.0, -9.8, -9.4, -3.2, -4.7, -4.6, -2.4, 10.5, 10.6, 10.4, 12.6, -8.2, -7.9, -9.0, -4.7, -6.1, -6.0, -7.5, -2.9, -10.9, -12.2, -11.2, -10.9, -2.4, -2.9, -2.7, -0.9, -10.4, -9.7, -10.2, -8.0, -8.4, -9.1, -9.3, -6.5, -50.0, -13.3, -50.0, -11.0, -0.0, -0.4, -0.4, 2.3, -50.0, -10.9, -17.2, -8.3, -8.3, -12.7, -7.8, -9.3], [2.1, -8.1, 1.2, -7.0, -8.0, -9.5, -7.3, -9.9, 10.5, -5.5, 9.3, -5.7, -9.5, -15.1, -10.0, -12.9, 2.5, -1.2, -0.1, -1.0, -6.0, -8.1, -5.7, -8.2, 13.8, 11.3, 11.8, 12.1, -6.0, -9.1, -9.0, -9.5, -8.9, -13.4, -10.0, -13.1, -9.9, -11.7, -9.8, -12.8, -5.9, -9.4, -6.5, -8.1, -10.7, -14.0, -13.3, -13.9, -50.0, -11.9, -50.0, -9.7, -8.9, -10.8, -9.0, -11.1, -50.0, -6.5, -5.3, -6.3, -10.5, -16.2, -10.4, -15.2], [0.0, -5.0, 0.5, -6.8, -9.1, -7.8, -7.5, -8.9, 7.7, -2.4, 8.2, -5.1, -11.9, -13.1, -10.4, -14.3, -0.8, 3.0, -0.9, 0.8, -8.3, -5.2, -5.8, -7.9, 11.3, 15.0, 11.2, 12.8, -9.7, -5.3, -9.2, -7.8, -11.7, -10.6, -10.1, -12.2, -11.7, -8.8, -8.9, -11.8, -9.3, -5.0, -8.0, -8.2, -13.6, -11.4, -12.8, -13.0, -50.0, -7.2, -50.0, -8.4, -11.0, -7.7, -8.7, -10.2, -50.0, -1.5, -7.1, -4.9, -11.2, -11.6, -11.6, -15.0], [1.4, -7.3, 2.2, -7.1, -8.0, -9.3, -6.4, -9.6, 9.1, -5.5, 10.0, -5.4, -10.9, -14.3, -8.4, -14.0, 0.9, -1.1, 2.4, -1.3, -6.9, -8.0, -3.5, -9.0, 11.8, 11.2, 13.4, 11.4, -7.3, -8.8, -6.5, -8.5, -10.0, -12.5, -7.8, -12.5, -9.6, -11.0, -7.1, -10.7, -7.9, -8.0, -4.3, -9.4, -11.4, -12.3, -10.9, -12.9, -50.0, -11.8, -50.0, -11.2, -9.4, -9.8, -7.3, -10.5, -50.0, -6.2, -2.2, -6.7, -9.8, -15.2, -8.5, -14.9], [0.2, -6.3, 0.1, -4.3, -8.2, -8.9, -8.5, -7.0, 8.5, -4.1, 8.0, -2.1, -10.5, -13.4, -10.2, -11.9, 0.2, 1.6, -0.8, 3.4, -7.5, -6.7, -6.1, -4.7, 12.1, 12.8, 11.4, 14.7, -8.7, -7.4, -9.4, -5.3, -9.9, -11.8, -10.5, -10.3, -9.9, -10.1, -9.3, -9.3, -8.1, -7.2, -8.0, -5.2, -12.0, -12.1, -12.6, -10.9, -50.0, -7.9, -50.0, -5.3, -9.3, -8.8, -8.9, -7.0, -50.0, -3.6, -7.1, -1.2, -10.2, -12.7, -9.9, -11.0], [-10.2, -13.4, -11.8, -12.4, -6.0, -9.4, -7.1, -8.6, -9.8, -12.9, -10.8, -12.4, 2.3, -1.4, 1.0, -1.0, -3.0, -8.0, -5.1, -7.6, -2.2, -6.1, -3.6, -6.1, -6.0, -9.7, -7.3, -8.7, 11.2, 7.9, 8.9, 8.1, -12.1, -17.4, -13.2, -16.8, -6.3, -9.5, -7.5, -8.8, -12.7, -15.2, -13.1, -14.2, 0.0, -3.1, -1.8, -3.1, -50.0, -10.7, -50.0, -9.3, -4.6, -8.9, -5.9, -8.3, -50.0, -12.8, -9.6, -10.6, 9.5, -3.2, 8.2, -2.8], [-13.5, -11.3, -14.0, -12.9, -9.3, -7.1, -8.2, -8.9, -12.7, -10.3, -11.9, -12.3, -0.4, 1.4, -0.6, -0.4, -7.2, -4.7, -6.9, -5.7, -7.4, -3.7, -6.5, -6.0, -9.1, -5.3, -8.8, -7.4, 7.9, 11.9, 7.8, 9.3, -15.2, -15.1, -14.6, -17.2, -9.7, -7.3, -8.2, -9.2, -15.0, -12.8, -14.1, -14.9, -2.8, 0.2, -2.9, -2.3, -50.0, -7.4, -50.0, -8.7, -9.4, -7.3, -9.4, -9.4, -50.0, -8.0, -11.9, -9.7, 6.5, 0.5, 6.4, -1.8], [-13.0, -14.4, -11.9, -13.9, -7.7, -9.0, -6.7, -8.8, -11.7, -12.7, -10.7, -13.1, -0.2, -1.6, 1.7, -1.6, -5.7, -8.7, -4.8, -8.1, -5.3, -7.5, -3.3, -7.5, -9.0, -9.2, -6.5, -9.4, 8.9, 7.8, 10.1, 7.8, -14.3, -17.7, -13.0, -17.8, -8.0, -9.4, -6.2, -9.2, -15.1, -14.9, -12.2, -14.9, -1.8, -3.2, -0.8, -3.2, -50.0, -10.8, -50.0, -9.9, -7.3, -9.6, -6.4, -9.4, -50.0, -12.3, -8.7, -11.3, 7.6, -3.3, 8.7, -2.9], [-12.5, -12.9, -13.4, -10.0, -8.5, -9.0, -7.8, -6.8, -11.8, -11.3, -12.4, -10.1, -0.3, -0.5, -0.5, 1.2, -6.1, -6.0, -6.7, -3.5, -5.9, -5.6, -5.5, -2.9, -9.5, -7.8, -8.5, -5.3, 8.1, 9.3, 7.8, 11.8, -14.4, -15.7, -14.5, -14.6, -8.4, -8.7, -7.9, -7.1, -14.3, -13.8, -13.8, -12.3, -2.4, -2.2, -2.9, -0.2, -50.0, -8.9, -50.0, -7.1, -8.1, -9.1, -8.7, -6.6, -50.0, -9.7, -11.4, -8.0, 6.8, -1.8, 6.9, 0.4], [-2.6, -6.3, -4.9, -4.9, -6.4, -9.4, -7.9, -8.6, -6.3, -7.4, -8.2, -6.6, -9.7, -14.9, -11.1, -13.9, -0.2, -8.2, -2.3, -6.8, -8.9, -11.1, -9.4, -10.9, -8.9, -11.7, -10.0, -9.9, -12.1, -15.2, -14.3, -14.4, 11.1, 2.9, 9.2, 3.5, -3.0, -7.0, -4.3, -6.2, -2.2, -6.6, -3.7, -5.7, -6.0, -10.4, -8.6, -9.5, -50.0, -15.5, -50.0, -13.9, -7.8, -10.5, -8.7, -9.6, -50.0, -16.5, -17.1, -14.8, -12.1, -18.9, -12.4, -17.4], [-8.5, 0.8, -9.1, -0.7, -10.1, -7.5, -9.1, -8.2, -11.4, -3.1, -11.8, -4.4, -15.5, -14.3, -14.8, -15.4, -6.6, -4.7, -7.1, -5.8, -12.5, -10.3, -11.0, -12.2, -13.4, -10.6, -12.5, -11.8, -17.4, -15.1, -17.7, -15.7, 2.9, 12.5, 3.1, 10.3, -7.7, -5.2, -6.2, -7.3, -5.4, -1.7, -5.4, -3.7, -11.6, -9.1, -13.0, -10.8, -50.0, -10.3, -50.0, -11.2, -9.8, -8.3, -9.1, -9.7, -50.0, -12.7, -20.6, -13.1, -16.0, -16.6, -17.0, -18.4], [-5.0, -6.4, -3.4, -5.6, -7.5, -9.3, -7.1, -8.8, -8.8, -7.4, -6.9, -6.9, -11.4, -15.2, -9.7, -13.7, -1.8, -7.8, -0.8, -7.2, -9.4, -10.6, -8.7, -11.2, -10.0, -10.1, -7.8, -10.5, -13.2, -14.6, -13.0, -14.5, 9.2, 3.1, 10.8, 3.0, -4.5, -6.7, -2.7, -6.7, -5.0, -6.8, -2.5, -6.7, -7.5, -10.4, -7.4, -10.2, -50.0, -15.5, -50.0, -14.2, -8.9, -10.2, -8.5, -10.0, -50.0, -15.6, -15.3, -15.5, -13.0, -18.8, -12.6, -18.3], [-8.1, -1.1, -8.9, 1.4, -8.6, -9.2, -9.4, -6.8, -11.0, -4.9, -11.5, -2.6, -13.7, -16.8, -14.5, -12.6, -6.0, -6.7, -7.2, -4.2, -11.6, -11.9, -11.2, -10.9, -13.1, -12.2, -12.5, -10.3, -16.8, -17.2, -17.8, -14.6, 3.5, 10.3, 3.0, 12.4, -6.9, -7.5, -6.8, -4.9, -5.4, -4.2, -5.4, -1.3, -10.8, -11.5, -12.4, -8.2, -50.0, -12.5, -50.0, -8.9, -9.2, -10.0, -9.4, -7.9, -50.0, -14.3, -19.9, -11.4, -16.2, -19.2, -15.8, -15.9], [-6.3, -7.4, -8.0, -6.0, 2.8, -0.7, 0.9, 0.3, -7.5, -4.4, -8.4, -3.6, -3.0, -7.7, -3.7, -6.2, -5.3, -10.0, -7.2, -8.9, -0.7, -3.2, -1.8, -2.4, -9.9, -11.7, -9.6, -9.9, -6.3, -9.7, -8.0, -8.4, -3.0, -7.7, -4.5, -6.9, 11.3, 8.2, 9.4, 9.1, -1.0, -3.3, -1.8, -2.4, 1.5, -2.1, -0.4, -1.1, -50.0, -14.5, -50.0, -12.9, 2.8, -0.0, 1.4, 0.7, -50.0, -8.7, -14.1, -7.5, -5.2, -12.5, -6.5, -10.7], [-9.9, -5.0, -10.0, -6.5, -0.7, 2.6, -0.2, 0.1, -10.3, -1.8, -9.9, -3.8, -6.4, -4.7, -5.8, -6.7, -8.2, -8.3, -8.0, -10.2, -3.9, -1.0, -2.7, -2.9, -11.7, -8.8, -11.0, -10.1, -9.5, -7.3, -9.4, -8.7, -7.0, -5.2, -6.7, -7.5, 8.2, 11.6, 8.8, 9.1, -3.7, -0.9, -3.1, -3.0, -2.0, 1.2, -2.3, -1.3, -50.0, -12.1, -50.0, -12.6, 0.1, 2.5, 0.7, 0.6, -50.0, -6.0, -14.8, -7.5, -8.6, -9.4, -8.5, -11.2], [-7.5, -6.2, -7.2, -6.2, 0.9, 0.2, 2.5, 0.2, -8.3, -3.5, -7.1, -3.7, -4.1, -6.3, -3.1, -6.3, -5.7, -8.9, -5.6, -8.4, -2.3, -2.2, 0.7, -2.7, -9.8, -8.9, -7.1, -9.3, -7.5, -8.2, -6.2, -7.9, -4.3, -6.2, -2.7, -6.8, 9.4, 8.8, 12.1, 8.8, -2.1, -2.0, 0.1, -2.4, 0.0, -1.1, 1.3, -0.8, -50.0, -11.9, -50.0, -12.6, 1.2, 0.7, 3.5, 0.8, -50.0, -7.1, -12.4, -7.1, -7.1, -10.6, -5.0, -10.6], [-9.0, -6.5, -10.0, -4.8, 0.1, -0.1, -0.3, 2.4, -9.9, -3.5, -10.6, -2.0, -5.4, -6.6, -5.6, -4.4, -7.6, -9.9, -8.5, -8.2, -3.0, -2.8, -3.0, -0.9, -12.8, -11.8, -10.7, -9.3, -8.8, -9.2, -9.2, -7.1, -6.2, -7.3, -6.7, -4.9, 9.1, 9.1, 8.8, 11.2, -3.1, -3.0, -3.3, -1.0, -1.1, -1.4, -2.0, 1.2, -50.0, -12.8, -50.0, -10.9, 0.8, 0.5, 0.7, 2.3, -50.0, -7.5, -16.5, -5.9, -7.8, -11.1, -7.8, -9.0], [-7.1, -5.6, -9.1, -5.1, -5.9, -8.0, -6.9, -7.4, -1.9, -1.6, -4.7, -1.4, -9.6, -14.6, -10.4, -13.0, -6.7, -10.8, -9.4, -9.9, -9.1, -10.5, -9.1, -10.4, -5.9, -9.3, -7.9, -8.1, -12.7, -15.0, -15.1, -14.3, -2.2, -5.4, -5.0, -5.4, -1.0, -3.7, -2.1, -3.1, 12.8, 9.6, 11.1, 10.1, -4.8, -9.4, -8.1, -8.6, -50.0, -18.3, -50.0, -15.4, -5.9, -7.5, -6.6, -7.1, -50.0, -9.5, -11.7, -8.4, -12.5, -17.3, -13.2, -15.4], [-10.2, -1.6, -10.2, -3.2, -7.3, -4.6, -6.5, -6.2, -6.7, 3.0, -6.8, 0.8, -11.9, -10.8, -11.5, -12.2, -9.6, -7.1, -9.7, -8.4, -9.8, -8.1, -8.2, -9.7, -9.4, -5.0, -8.0, -7.2, -15.2, -12.8, -14.9, -13.8, -6.6, -1.7, -6.8, -4.2, -3.3, -0.9, -2.0, -3.0, 9.6, 12.8, 9.7, 10.5, -8.5, -5.6, -9.3, -7.8, -50.0, -12.7, -50.0, -13.8, -6.8, -5.1, -5.3, -6.5, -50.0, -4.1, -12.8, -5.8, -14.4, -14.1, -13.6, -14.8], [-8.2, -4.7, -7.1, -5.0, -6.5, -7.7, -5.5, -6.9, -4.1, -0.8, -1.2, -0.9, -10.5, -12.8, -8.2, -13.0, -7.5, -10.0, -7.2, -9.7, -9.2, -9.4, -7.3, -10.2, -6.5, -8.0, -4.3, -8.0, -13.1, -14.1, -12.2, -13.8, -3.7, -5.4, -2.5, -5.4, -1.8, -3.1, 0.1, -3.3, 11.1, 9.7, 12.9, 9.8, -5.5, -8.1, -5.4, -7.8, -50.0, -16.4, -50.0, -14.8, -5.9, -7.1, -4.7, -7.2, -50.0, -8.4, -6.4, -8.1, -12.1, -16.2, -10.3, -15.8], [-9.2, -3.0, -9.9, -1.2, -6.5, -6.1, -6.8, -4.4, -6.4, 0.9, -7.0, 3.0, -11.8, -13.0, -11.1, -10.4, -9.3, -9.2, -9.8, -6.4, -9.5, -9.5, -9.4, -8.0, -8.1, -8.2, -9.4, -5.2, -14.2, -14.9, -14.9, -12.3, -5.7, -3.7, -6.7, -1.3, -2.4, -3.0, -2.4, -1.0, 10.1, 10.5, 9.8, 13.1, -7.2, -8.0, -8.4, -5.0, -50.0, -14.7, -50.0, -11.4, -6.3, -6.7, -5.8, -5.0, -50.0, -6.1, -13.4, -3.6, -13.0, -16.0, -13.7, -13.3], [-8.2, -10.8, -10.1, -9.8, -0.4, -3.6, -1.7, -2.9, -7.9, -8.4, -9.8, -8.2, 6.2, 2.3, 0.6, 2.9, -7.1, -11.6, -9.2, -11.1, -5.6, -8.3, -7.2, -8.4, -10.7, -13.6, -11.4, -12.0, 0.0, -2.8, -1.8, -2.4, -6.0, -11.6, -7.5, -10.8, 1.5, -2.0, 0.0, -1.1, -4.8, -8.5, -5.5, -7.2, 11.9, 8.6, 10.0, 9.0, -50.0, -14.2, -50.0, -12.8, -4.1, -7.4, -5.7, -6.5, -50.0, -11.0, -14.3, -9.9, 1.4, -7.9, -0.7, -6.8], [-12.5, -8.7, -13.0, -9.9, -3.9, -1.0, -3.4, -2.9, -12.5, -6.3, -11.6, -8.1, 3.3, 6.0, -1.6, 3.8, -10.5, -10.1, -11.1, -11.1, -9.0, -6.9, -8.2, -9.1, -14.0, -11.4, -12.3, -12.1, -3.1, 0.2, -3.2, -2.2, -10.4, -9.1, -10.4, -11.5, -2.1, 1.2, -1.1, -1.4, -9.4, -5.6, -8.1, -8.0, 8.6, 12.4, 8.6, 9.5, -50.0, -10.4, -50.0, -11.6, -7.2, -5.7, -7.5, -7.4, -50.0, -8.6, -15.7, -9.7, -3.0, -3.7, -3.2, -5.9], [-11.1, -11.9, -10.6, -11.3, -2.6, -4.1, -1.7, -3.5, -11.4, -9.6, -9.6, -9.2, 3.7, 2.5, 1.6, 2.5, -9.6, -12.3, -9.5, -11.8, -8.0, -9.4, -7.2, -9.3, -13.3, -12.8, -10.9, -12.6, -1.8, -2.9, -0.8, -2.9, -8.6, -13.0, -7.4, -12.4, -0.4, -2.3, 1.3, -2.0, -8.1, -9.3, -5.4, -8.4, 10.0, 8.6, 11.4, 8.9, -50.0, -13.7, -50.0, -13.2, -6.1, -8.1, -5.5, -7.5, -50.0, -11.3, -12.7, -10.1, -1.6, -7.8, -0.3, -7.2], [-11.4, -10.0, -12.7, -8.2, -3.1, -3.1, -2.8, -0.9, -11.7, -7.3, -12.1, -5.8, 3.6, 3.6, -1.1, 5.8, -9.4, -11.9, -10.7, -10.0, -8.5, -8.8, -8.2, -6.5, -13.9, -13.0, -12.9, -10.9, -3.1, -2.3, -3.2, -0.2, -9.5, -10.8, -10.2, -8.2, -1.1, -1.3, -0.8, 1.2, -8.6, -7.8, -7.8, -5.0, 9.0, 9.5, 8.9, 12.0, -50.0, -13.0, -50.0, -10.3, -6.2, -7.0, -7.1, -5.4, -50.0, -9.3, -14.0, -8.2, -2.4, -6.3, -2.4, -3.9], [-50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, 33.3, -50.0, 30.6, -50.0, -50.0, -50.0, -50.0, -50.0, 29.2, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0], [-14.8, -6.2, -14.9, -7.6, -14.6, -11.6, -13.0, -12.2, -14.0, -9.0, -14.1, -10.1, -13.6, -11.2, -12.4, -12.5, -8.1, 2.2, -8.7, 0.4, -15.3, -11.3, -13.2, -13.3, -11.9, -7.2, -11.8, -7.9, -10.7, -7.4, -10.8, -8.9, -15.5, -10.3, -15.5, -12.5, -14.5, -12.1, -11.9, -12.8, -18.3, -12.7, -16.4, -14.7, -14.2, -10.4, -13.7, -13.0, -50.0, 15.1, -50.0, 13.3, -9.9, -5.8, -8.9, -7.6, -50.0, -1.5, -7.8, -3.0, -8.1, 3.6, -9.4, 2.0], [-50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, 30.6, -50.0, 35.2, -50.0, -50.0, -50.0, -50.0, -50.0, 28.5, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0], [-13.8, -7.5, -14.4, -5.1, -12.6, -11.6, -11.5, -10.1, -13.2, -9.7, -12.7, -7.4, -11.9, -11.9, -11.5, -10.2, -7.2, 0.9, -8.6, 2.6, -14.1, -12.8, -13.3, -11.0, -9.7, -8.4, -11.2, -5.3, -9.3, -8.7, -9.9, -7.1, -13.9, -11.2, -14.2, -8.9, -12.9, -12.6, -12.6, -10.9, -15.4, -13.8, -14.8, -11.4, -12.8, -11.6, -13.2, -10.3, -50.0, 13.3, -50.0, 15.2, -8.6, -7.0, -8.4, -4.8, -50.0, -3.0, -7.1, -0.1, -7.3, 2.3, -8.7, 3.9], [-7.3, -6.3, -8.9, -5.5, 2.9, 0.2, 1.5, 1.2, -8.5, -2.3, -10.0, -1.7, -5.6, -10.5, -5.5, -9.6, -4.3, -7.9, -6.1, -7.2, 2.3, -0.6, 0.5, -0.0, -8.9, -11.0, -9.4, -9.3, -4.6, -9.4, -7.3, -8.1, -7.8, -9.8, -8.9, -9.2, 2.8, 0.1, 1.2, 0.8, -5.9, -6.8, -5.9, -6.3, -4.1, -7.2, -6.1, -6.2, -50.0, -9.9, -50.0, -8.6, 12.5, 9.4, 11.0, 9.8, -50.0, -4.8, -8.7, -3.5, -0.0, -8.6, -2.1, -7.0], [-10.1, -4.3, -10.8, -5.8, 0.1, 2.3, 0.7, 0.6, -10.4, -0.2, -10.8, -2.0, -8.8, -9.2, -8.0, -9.7, -6.8, -5.9, -7.5, -7.0, -1.4, 2.2, -0.9, -0.4, -10.8, -7.7, -9.8, -8.8, -8.9, -7.3, -9.6, -9.1, -10.5, -8.3, -10.2, -10.0, -0.0, 2.5, 0.7, 0.5, -7.5, -5.1, -7.1, -6.7, -7.4, -5.7, -8.1, -7.0, -50.0, -5.8, -50.0, -7.0, 9.4, 12.7, 10.1, 10.0, -50.0, -1.5, -11.3, -3.3, -5.4, -4.2, -5.6, -6.8], [-8.4, -6.2, -8.9, -5.9, 1.8, 0.4, 2.7, 1.2, -9.1, -1.2, -8.8, -1.5, -7.2, -10.5, -4.9, -9.6, -5.7, -7.4, -5.5, -7.4, 0.3, -0.3, 1.8, -0.4, -9.0, -8.7, -7.3, -8.9, -5.9, -9.4, -6.4, -8.7, -8.7, -9.1, -8.5, -9.4, 1.4, 0.7, 3.5, 0.7, -6.6, -5.3, -4.7, -5.8, -5.7, -7.5, -5.5, -7.1, -50.0, -8.9, -50.0, -8.4, 11.0, 10.1, 13.2, 10.2, -50.0, -4.2, -6.1, -3.6, -3.5, -8.4, -1.2, -6.8], [-9.1, -5.4, -10.4, -4.2, 1.0, 0.5, 0.6, 2.4, -9.6, -1.5, -10.5, -0.5, -8.9, -10.5, -7.2, -8.3, -6.3, -6.9, -7.7, -5.1, -0.5, 0.1, -0.6, 2.3, -11.1, -10.2, -10.5, -7.0, -8.3, -9.4, -9.4, -6.6, -9.6, -9.7, -10.0, -7.9, 0.7, 0.6, 0.8, 2.3, -7.1, -6.5, -7.2, -5.0, -6.5, -7.4, -7.5, -5.4, -50.0, -7.6, -50.0, -4.8, 9.8, 10.0, 10.2, 12.1, -50.0, -3.1, -11.4, -0.7, -4.6, -6.6, -4.9, -3.9], [-50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, 29.2, -50.0, 28.5, -50.0, -50.0, -50.0, -50.0, -50.0, 33.3, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0, -50.0], [-13.0, -7.0, -13.1, -8.3, -9.2, -6.5, -8.9, -7.6, -9.8, -0.7, -9.2, -2.1, -12.4, -10.3, -12.4, -11.6, -9.5, -4.6, -10.4, -5.7, -13.6, -10.1, -11.4, -10.9, -6.5, -1.5, -6.2, -3.6, -12.8, -8.0, -12.3, -9.7, -16.5, -12.7, -15.6, -14.3, -8.7, -6.0, -7.1, -7.5, -9.5, -4.1, -8.4, -6.1, -11.0, -8.6, -11.3, -9.3, -50.0, -1.5, -50.0, -3.0, -4.8, -1.5, -4.2, -3.1, -50.0, 16.4, -5.1, 14.2, -10.1, -4.3, -10.0, -5.4], [-13.5, -16.3, -11.8, -15.5, -13.6, -15.3, -12.1, -16.1, -7.7, -13.3, -4.2, -12.6, -14.1, -16.2, -10.3, -15.4, -9.6, -11.6, -7.7, -9.8, -14.3, -17.5, -11.1, -17.2, -5.3, -7.1, -2.2, -7.1, -9.6, -11.9, -8.7, -11.4, -17.1, -20.6, -15.3, -19.9, -14.1, -14.8, -12.4, -16.5, -11.7, -12.8, -6.4, -13.4, -14.3, -15.7, -12.7, -14.0, -50.0, -7.8, -50.0, -7.1, -8.7, -11.3, -6.1, -11.4, -50.0, -5.1, 18.6, -4.8, -8.6, -8.1, -4.5, -7.3], [-12.4, -8.2, -13.0, -5.9, -7.7, -7.8, -7.4, -5.8, -8.8, -2.0, -9.3, -0.4, -11.6, -11.3, -11.6, -9.4, -8.9, -5.6, -10.0, -3.2, -11.5, -11.1, -10.5, -8.3, -6.3, -4.9, -6.7, -1.2, -10.6, -9.7, -11.3, -8.0, -14.8, -13.1, -15.5, -11.4, -7.5, -7.5, -7.1, -5.9, -8.4, -5.8, -8.1, -3.6, -9.9, -9.7, -10.1, -8.2, -50.0, -3.0, -50.0, -0.1, -3.5, -3.3, -3.6, -0.7, -50.0, 14.2, -4.8, 16.4, -8.9, -5.8, -8.9, -3.4], [-10.7, -13.2, -12.4, -11.6, -4.8, -8.4, -6.1, -7.2, -10.3, -11.8, -11.0, -11.6, 2.8, -1.7, 0.7, -1.1, -6.2, -9.7, -7.3, -8.4, -5.3, -8.6, -6.1, -8.3, -10.5, -11.2, -9.8, -10.2, 9.5, 6.5, 7.6, 6.8, -12.1, -16.0, -13.0, -16.2, -5.2, -8.6, -7.1, -7.8, -12.5, -14.4, -12.1, -13.0, 1.4, -3.0, -1.6, -2.4, -50.0, -8.1, -50.0, -7.3, -0.0, -5.4, -3.5, -4.6, -50.0, -10.1, -8.6, -8.9, 13.2, -0.9, 9.7, -0.3], [-18.1, -12.3, -19.4, -14.2, -12.2, -9.5, -11.5, -10.8, -17.9, -11.9, -18.2, -13.9, -6.4, -3.7, -6.8, -5.4, -12.8, -5.9, -13.6, -7.4, -13.7, -9.9, -12.9, -12.7, -16.2, -11.6, -15.2, -12.7, -3.2, 0.5, -3.3, -1.8, -18.9, -16.6, -18.8, -19.2, -12.5, -9.4, -10.6, -11.1, -17.3, -14.1, -16.2, -16.0, -7.9, -3.7, -7.8, -6.3, -50.0, 3.6, -50.0, 2.3, -8.6, -4.2, -8.4, -6.6, -50.0, -4.3, -8.1, -5.8, -0.9, 14.2, -1.8, 11.6], [-11.8, -13.1, -11.5, -12.0, -6.2, -8.3, -5.4, -7.4, -11.8, -12.3, -11.1, -11.4, 0.5, -2.5, 2.4, -1.6, -6.8, -9.9, -6.4, -8.9, -6.1, -8.6, -5.0, -7.8, -10.4, -11.6, -8.5, -9.9, 8.2, 6.4, 8.7, 6.9, -12.4, -17.0, -12.6, -15.8, -6.5, -8.5, -5.0, -7.8, -13.2, -13.6, -10.3, -13.7, -0.7, -3.2, -0.3, -2.4, -50.0, -9.4, -50.0, -8.7, -2.1, -5.6, -1.2, -4.9, -50.0, -10.0, -4.5, -8.9, 9.7, -1.8, 11.3, -0.9], [-17.2, -13.3, -17.8, -11.6, -11.0, -11.1, -10.4, -9.0, -16.0, -12.7, -16.1, -11.1, -5.2, -5.4, -6.0, -3.3, -11.8, -7.3, -13.3, -5.9, -12.7, -11.9, -11.9, -9.3, -15.2, -15.0, -14.9, -11.0, -2.8, -1.8, -2.9, 0.4, -17.4, -18.4, -18.3, -15.9, -10.7, -11.2, -10.6, -9.0, -15.4, -14.8, -15.8, -13.3, -6.8, -5.9, -7.2, -3.9, -50.0, 2.0, -50.0, 3.9, -7.0, -6.8, -6.8, -3.9, -50.0, -5.4, -7.3, -3.4, -0.3, 11.6, -0.9, 14.1]]; private TRANS:Array> = [[5, 0, 0, 4], [0, 5, 4, 0], [0, 4, 5, 0], [4, 0, 0, 5]]; private CONBLO: {[id:string]:number} = {'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8, 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16, 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23}; private CONNUCL: {[id:string]:number} = {'A': 0, 'T': 1, 'C': 2, 'G': 3}; private CONSCHN: {[id:string]:number} = {'AAA': 0, 'AAC': 1, 'AAG': 2, 'AAT': 3, 'ACA': 4, 'ACC': 5, 'ACG': 6, 'ACT': 7, 'AGA': 8, 'AGC': 9, 'AGG': 10, 'AGT': 11, 'ATA': 12, 'ATC': 13, 'ATG': 14, 'ATT': 15, 'CAA': 16, 'CAC': 17, 'CAG': 18, 'CAT': 19, 'CCA': 20, 'CCC': 21, 'CCG': 22, 'CCT': 23, 'CGA': 24, 'CGC': 25, 'CGG': 26, 'CGT': 27, 'CTA': 28, 'CTC': 29, 'CTG': 30, 'CTT': 31, 'GAA': 32, 'GAC': 33, 'GAG': 34, 'GAT': 35, 'GCA': 36, 'GCC': 37, 'GCG': 38, 'GCT': 39, 'GGA': 40, 'GGC': 41, 'GGG': 42, 'GGT': 43, 'GTA': 44, 'GTC': 45, 'GTG': 46, 'GTT': 47, 'TAA': 48, 'TAC': 49, 'TAG': 50, 'TAT': 51, 'TCA': 52, 'TCC': 53, 'TCG': 54, 'TCT': 55, 'TGA': 56, 'TGC': 57, 'TGG': 58, 'TGT': 59, 'TTA': 60, 'TTC': 61, 'TTG': 62, 'TTT': 63}; private fillNeedleman() { for (let i: number = 0; i<= this.len1; i++) { this.dpGrid[i][0].value = -i*this.gap; this.dpGrid[i][0].parentI = i-1; this.dpGrid[i][0].parentJ = 0; } for (let i: number = 1; i<= this.len2; i++) { this.dpGrid[0][i].value = -i*this.gap; this.dpGrid[0][i].parentI = 0; this.dpGrid[0][i].parentJ = i-1; } } private fillOne(i: number, j: number) { this.dpGrid[i][j].value = Math.max(this.dpGrid[i-1][j-1].value+this.scores[i-1][j-1], Math.max(this.dpGrid[i-1][j].value-this.gap, this.dpGrid[i][j-1].value-this.gap)); if (this.dpGrid[i][j].value == this.dpGrid[i-1][j-1].value+this.scores[i-1][j-1]) { this.dpGrid[i][j].parentI = i-1; this.dpGrid[i][j].parentJ = j-1; } else if (this.dpGrid[i][j].value == this.dpGrid[i-1][j].value-this.gap) { this.dpGrid[i][j].parentI = i-1; this.dpGrid[i][j].parentJ = j; } else { this.dpGrid[i][j].parentI = i; this.dpGrid[i][j].parentJ = j-1; } } private gridFromName(path: string) { switch (path) { case 'BLOSUM45': this.alignGrid = this.BLOSUM45; this.connections = this.CONBLO; this.step = 1; break; case 'BLOSUM50': this.alignGrid = this.BLOSUM50; this.connections = this.CONBLO; this.step = 1; break; case 'BLOSUM62': this.alignGrid = this.BLOSUM62; this.connections = this.CONBLO; this.step = 1; break; case 'BLOSUM80': this.alignGrid = this.BLOSUM80; this.connections = this.CONBLO; this.step = 1; break; case 'BLOSUM90': this.alignGrid = this.BLOSUM90; this.connections = this.CONBLO; this.step = 1; break; case 'PAM30': this.alignGrid = this.PAM30; this.connections = this.CONBLO; this.step = 1; break; case 'PAM70': this.alignGrid = this.PAM70; this.connections = this.CONBLO; this.step = 1; break; case 'PAM250': this.alignGrid = this.PAM250; this.connections = this.CONBLO; this.step = 1; break; case 'NUCLEOTIDES': this.alignGrid = this.NUCLEOTIDES; this.connections = this.CONNUCL; this.step = 1; break; case 'TRANS': this.alignGrid = this.TRANS; this.connections = this.CONNUCL; this.step = 1; break; case 'SCHNEIDER': this.alignGrid = this.SCHNEIDER; this.connections = this.CONSCHN; this.step = 3; break; } this.fillScores(); } private constructResult(i: number, j: number): Aligned { let res1:string = ''; let res2:string =''; let gapS:string =''; const total: number = this.dpGrid[i][j].value; for (let i:number = 0; i< this.step; i++) gapS+='|'; while (i>0 || j>0) { if (this.dpGrid[i][j].parentI == i) { res1 = gapS+res1; res2 = this.seq2.substr((j-1)*this.step, this.step)+res2; } else if (this.dpGrid[i][j].parentJ == j) { res2 = gapS+res2; res1 = this.seq1.substr((i-1)*this.step, this.step)+res1; } else { if (i-1>=0)res1 = this.seq1.substr((i-1)*this.step, this.step)+res1; else res1 = gapS+res1; if (j-1>=0)res2 = this.seq2.substr((j-1)*this.step, this.step)+res2; else res2 = gapS+res2; } const tempI: number = i; i=this.dpGrid[i][j].parentI; j=this.dpGrid[tempI][j].parentJ; } return new Aligned(res1, res2, total); } private fillScores() { this.scores = []; for (let i: number = 0; i < this.len1; i++) { this.scores.push([]); for (let j:number = 0; j < this.len2; j++) { this.scores[i].push( this.alignGrid[ this.connections[this.seq1.substr(i*this.step, this.step)] ][this.connections[this.seq2.substr(j*this.step, this.step)]]); } } } private typeRec():string { if (/[ATGC]*/.test(this.seq1) && /[ATGC]*/.test(this.seq2)) return 'NUCLEOTIDES'; if (/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1) && /[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2)) return 'BLOSUM62'; throw Error('Can\'t recognize sequence type'); } public needlemanWunsch():Aligned { this.dpGrid=[]; for (let i:number = 0; i bestVal) { bestVal = this.dpGrid[i][j].value; bestI = i; bestJ = j; } } } return this.constructResult(bestI, bestJ); } public setSequences( seq1_: string, seq2_: string) { this.seq1 = seq1_; this.seq2 = seq2_; this.len1 = this.seq1.length/this.step; this.len2 = this.seq2.length/this.step; this.fillScores(); } public setGap( gap_:number) { this.gap = gap_; } public setMethod( alignGrid_ : string= '') { if (alignGrid_ == 'AUTO') alignGrid_ = this.typeRec(); this.gridFromName(alignGrid_); } public constructor( seq1_:string, seq2_:string, gap_:number, alignGrid_:string = '') { this.setMethod(alignGrid_); this.setSequences(seq1_, seq2_); this.setGap(gap_); } }