def __init__(self, conn):
self.conn = conn<EOL>act_security_table = conn.get_table_data(ACT_SECURITY_LIMITING_TBL)<EOL>security_table = conn.get_table_data(SECURITY_TBL)<EOL>access_ctl_table = conn.get_table_data(ACCESS_CONTROL_TBL)<EOL>try:<EOL><INDENT>key_table = conn.get_table_data(KEY_TBL)<EOL><DEDENT>except C1218ReadTableError:<EOL><INDENT>key_table = None<EOL><DEDENT>if len(act_security_table) < <NUM_LIT:6>:<EOL><INDENT>raise C1219ParseError('<STR_LIT>', ACT_SECURITY_LIMITING_TBL)<EOL><DEDENT>self._nbr_passwords = act_security_table[<NUM_LIT:0>]<EOL>self._password_len = act_security_table[<NUM_LIT:1>]<EOL>self._nbr_keys = act_security_table[<NUM_LIT:2>]<EOL>self._key_len = act_security_table[<NUM_LIT:3>]<EOL>self._nbr_perm_used = struct.unpack(self.conn.c1219_endian + '<STR_LIT:H>', act_security_table[<NUM_LIT:4>:<NUM_LIT:6>])[<NUM_LIT:0>]<EOL>if len(security_table) != ((self.nbr_passwords * self.password_len) + self.nbr_passwords):<EOL><INDENT>raise C1219ParseError('<STR_LIT>', SECURITY_TBL)<EOL><DEDENT>self._passwords = {}<EOL>tmp = <NUM_LIT:0><EOL>while tmp < self.nbr_passwords:<EOL><INDENT>self._passwords[tmp] = {'<STR_LIT>': tmp, '<STR_LIT:password>': security_table[:self.password_len], '<STR_LIT>': security_table[self.password_len]}<EOL>security_table = security_table[self.password_len + <NUM_LIT:1>:]<EOL>tmp += <NUM_LIT:1><EOL><DEDENT>if len(access_ctl_table) != (self.nbr_perm_used * <NUM_LIT:4>):<EOL><INDENT>raise C1219ParseError('<STR_LIT>', ACCESS_CONTROL_TBL)<EOL><DEDENT>self._table_permissions = {}<EOL>self._procedure_permissions = {}<EOL>tmp = <NUM_LIT:0><EOL>while tmp < self.nbr_perm_used:<EOL><INDENT>(proc_nbr, std_vs_mfg, proc_flag, flag1, flag2, flag3) = get_table_idcb_field(self.conn.c1219_endian, access_ctl_table)<EOL>if proc_flag:<EOL><INDENT>self._procedure_permissions[proc_nbr] = {'<STR_LIT>': proc_nbr, '<STR_LIT>': std_vs_mfg, '<STR_LIT>': flag1, '<STR_LIT>': flag2, '<STR_LIT>': access_ctl_table[<NUM_LIT:2>], '<STR_LIT>': access_ctl_table[<NUM_LIT:3>]}<EOL><DEDENT>else:<EOL><INDENT>self._table_permissions[proc_nbr] = {'<STR_LIT>': proc_nbr, '<STR_LIT>': std_vs_mfg, '<STR_LIT>': flag1, '<STR_LIT>': flag2, '<STR_LIT>': access_ctl_table[<NUM_LIT:2>], '<STR_LIT>': access_ctl_table[<NUM_LIT:3>]}<EOL><DEDENT>access_ctl_table = access_ctl_table[<NUM_LIT:4>:]<EOL>tmp += <NUM_LIT:1><EOL><DEDENT>self._keys = {}<EOL>if key_table is not None:<EOL><INDENT>if len(key_table) != (self.nbr_keys * self.key_len):<EOL><INDENT>raise C1219ParseError('<STR_LIT>', KEY_TBL)<EOL><DEDENT>tmp = <NUM_LIT:0><EOL>while tmp < self.nbr_keys:<EOL><INDENT>self._keys[tmp] = key_table[:self.key_len]<EOL>key_table = key_table[self.key_len:]<EOL>tmp += <NUM_LIT:1><EOL><DEDENT><DEDENT>
Initializes a new instance of the class and reads tables from the
corresponding decades to populate information.

@type conn: c1218.connection.Connection
@param conn: The driver to be used for interacting with the
necessary tables.