def saveMongoService(json):
    conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'),
                                  port=masarconfig.get('mongodb', 'port'),
                                  db=masarconfig.get('mongodb', 'database'))
    for conf in json['configs']:
        params = {
            "desc": conf['config_desc'],
            "system": conf['system'],
            "status": "active"
        }
        try:
            saveconfig(conn, collection, conf['config_name'], **params)
        except:  # TODO: This should be more specific
            print("configuration name (%s) exists already." %
                  (conf['config_name']))
    pvgroups = {}  # {"pvgname":["pv1","pv2"]}
    for pvgroup in json['pvgroups']:
        pvlist = []
        pv_file = pvgroup['pvlist']
        if os.path.exists(pv_file):
            with open(pv_file) as file:
                for line in file:
                    pvlist.append(line.strip())
        pvgroups[pvgroup['name']] = pvlist
    for conf in json['pvg2config']:
        pvs = []
        for pvgroup in conf['pvgroups']:
            pvs = pvs + pvgroups[pvgroup]
        updateconfig(conn,
                     collection,
                     conf['config_name'],
                     pvlist={"names": pvs})
def MONGODB_TEST_SETUP(self):
    self.conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'),
                                       db=masarconfig.get('mongodb', 'database'))


    self.conn.drop_database(masarconfig.get('mongodb', 'database'))
    name = "SR_All_20140421"
    params = {"desc": "SR daily SCR setpoint without IS kick and septum: SR and RF",
              "system": "SR",
              "status": "active",
              "version": 20140421,
              }
    newid = saveconfig(self.conn, collection, name, **params)
    # res0 = retrieveconfig(self.conn, collection, name)
    pvs = ["masarExample0000",
           "masarExample0001",
           # "masarExampleBoUninit",
           "masarExampleMbboUninit",
           "masarExample0002",
           "masarExample0003",
           "masarExample0004",
           "masarExampleCharArray",
           "masarExampleShortArray",
           "masarExampleLongArray",
           "masarExampleStringArray",
           "masarExampleFloatArray",
           "masarExampleDoubleArray",
           "masarExampleMbboUninitTest"]
    # TODO: Save will fail if list contains only 1 PV
    updateconfig(self.conn, collection, name, pvlist={"names": pvs})
    # res3 = retrieveconfig(self.conn, collection, name, withpvs=True)
    return self.conn
def saveMongoService(json):
    conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'),
                                       db=masarconfig.get('mongodb', 'database'))
    for conf in json['configs']:
        params = {"desc": conf['config_desc'],
                  "system": conf['system'],
                  "status": "active"}
        try:
            saveconfig(conn, collection, conf['config_name'], **params)
        except:  # TODO: This should be more specific
            print ("configuration name (%s) exists already." % (conf['config_name']))
    pvgroups = {}  # {"pvgname":["pv1","pv2"]}
    for pvgroup in json['pvgroups']:
        pvlist = []
        pv_file = pvgroup['pvlist']
        if os.path.exists(pv_file):
            with open(pv_file) as file:
                for line in file:
                    pvlist.append(line.strip())
        pvgroups[pvgroup['name']] = pvlist
    for conf in json['pvg2config']:
        pvs = []
        for pvgroup in conf['pvgroups']:
            pvs = pvs + pvgroups[pvgroup]
        updateconfig(conn, collection, conf['config_name'], pvlist={"names": pvs})
示例#4
0
def mongoSetUp():
    # DB SETUP
    conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'),
                                  port=masarconfig.get('mongodb', 'port'),
                                  db=masarconfig.get('mongodb', 'database'))

    conn.drop_database(masarconfig.get('mongodb', 'database'))
    name = "SR_All_20140421"
    params = {
        "desc": "SR daily SCR setpoint without IS kick and septum: SR and RF",
        "system": "SR",
        "status": "active",
        "version": 20140421,
    }
    newid = saveconfig(conn, collection, name, **params)
    # res0 = retrieveconfig(self.conn, collection, name)
    pvs = [
        "masarExample0000",
        "masarExample0001",
        # "masarExampleBoUninit",
        "masarExampleMbboUninit",
        "masarExample0002",
        "masarExample0003",
        "masarExample0004",
        "masarExampleCharArray",
        "masarExampleShortArray",
        "masarExampleLongArray",
        "masarExampleStringArray",
        "masarExampleFloatArray",
        "masarExampleDoubleArray",
        "masarExampleMbboUninitTest"
    ]
    # TODO: Save will fail if list contains only 1 PV
    updateconfig(conn, collection, name, pvlist={"names": pvs})
    def testConfiguration(self):
        channel = 'masarService'
        self.mc = masarClient.client(channelname=channel)
        # DB SETUP
        self.conn, collection = utils.conn(
            host=masarconfig.get('mongodb', 'host'),
            port=masarconfig.get('mongodb', 'port'),
            db=masarconfig.get('mongodb', 'database'))

        self.conn.drop_database(masarconfig.get('mongodb', 'database'))
        name = "SR_All_20140421"
        test_status = 'active'
        test_version = 20140421
        test_system = 'SR'
        test_desc = "SR daily SCR setpoint without IS kick and septum: SR and RF"
        params = {
            "desc": test_desc,
            "system": test_system,
            "status": test_status,
            "version": test_version,
        }
        newid = saveconfig(self.conn, collection, name, **params)
        self.assertNotEqual(None, newid)
        res0 = retrieveconfig(self.conn, collection, name)
        self.assertEqual(test_status, res0[0]['status'])
        self.assertEqual(1, res0[0]['configidx'])
        self.assertEqual(name, res0[0]['name'])
        self.assertEqual(test_system, res0[0]['system'])
        self.assertNotEqual(None, res0[0]['created_on'])
        # The following 2 tests are to confirm the date string is in the correct format
        self.assertEqual(3, len(res0[0]['created_on'].split('-')))
        self.assertEqual(3, len(res0[0]['created_on'].split(':')))
        self.assertEqual(test_version, res0[0]['version'])
        self.assertEqual(test_desc, res0[0]['desc'])
        pvs = ["masarExampleDoubleArray"]
        pvlist = {"names": pvs}
        res = updateconfig(self.conn, collection, name, pvlist=pvlist)
        self.assertEqual(True, res)
        res3 = retrieveconfig(self.conn, collection, name, withpvs=True)
        self.assertEqual(test_status, res3[0]['status'])
        self.assertEqual(1, res3[0]['configidx'])
        self.assertEqual(name, res3[0]['name'])
        self.assertEqual(test_system, res3[0]['system'])
        self.assertNotEqual(None, res3[0]['created_on'])
        # The following 2 tests are to confirm the date string is in the correct format
        self.assertEqual(3, len(res3[0]['created_on'].split('-')))
        self.assertEqual(3, len(res3[0]['created_on'].split(':')))
        self.assertEqual(test_version, res3[0]['version'])
        self.assertEqual(test_desc, res3[0]['desc'])
        self.assertEqual(pvlist, res3[0]['pvlist'])
        self.assertNotEqual(None, res3[0]['updated_on'])
        # The following 2 tests are to confirm the date string is in the correct format
        self.assertEqual(3, len(res3[0]['updated_on'].split('-')))
        self.assertEqual(3, len(res3[0]['updated_on'].split(':')))
        # drop DB
        self.conn.drop_database(masarconfig.get('mongodb', 'database'))
        utils.close(self.conn)
    def testConfiguration(self):
        channel = 'masarService'
        self.mc = masarClient.client(channelname=channel)
        # DB SETUP
        self.conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'),
                                           port=masarconfig.get('mongodb', 'port'),
                                           db=masarconfig.get('mongodb', 'database'))

        self.conn.drop_database(masarconfig.get('mongodb', 'database'))
        name = "SR_All_20140421"
        test_status = 'active'
        test_version = 20140421
        test_system = 'SR'
        test_desc = "SR daily SCR setpoint without IS kick and septum: SR and RF"
        params = {"desc": test_desc,
                  "system": test_system,
                  "status": test_status,
                  "version": test_version,
                  }
        newid = saveconfig(self.conn, collection, name, **params)
        self.assertNotEqual(None, newid)
        res0 = retrieveconfig(self.conn, collection, name)
        self.assertEqual(test_status, res0[0]['status'])
        self.assertEqual(1, res0[0]['configidx'])
        self.assertEqual(name, res0[0]['name'])
        self.assertEqual(test_system, res0[0]['system'])
        self.assertNotEqual(None, res0[0]['created_on'])
        # The following 2 tests are to confirm the date string is in the correct format
        self.assertEqual(3, len(res0[0]['created_on'].split('-')))
        self.assertEqual(3, len(res0[0]['created_on'].split(':')))
        self.assertEqual(test_version, res0[0]['version'])
        self.assertEqual(test_desc, res0[0]['desc'])
        pvs = ["masarExampleDoubleArray"]
        pvlist = {"names": pvs}
        res = updateconfig(self.conn, collection, name, pvlist=pvlist)
        self.assertEqual(True, res)
        res3 = retrieveconfig(self.conn, collection, name, withpvs=True)
        self.assertEqual(test_status, res3[0]['status'])
        self.assertEqual(1, res3[0]['configidx'])
        self.assertEqual(name, res3[0]['name'])
        self.assertEqual(test_system, res3[0]['system'])
        self.assertNotEqual(None, res3[0]['created_on'])
        # The following 2 tests are to confirm the date string is in the correct format
        self.assertEqual(3, len(res3[0]['created_on'].split('-')))
        self.assertEqual(3, len(res3[0]['created_on'].split(':')))
        self.assertEqual(test_version, res3[0]['version'])
        self.assertEqual(test_desc, res3[0]['desc'])
        self.assertEqual(pvlist, res3[0]['pvlist'])
        self.assertNotEqual(None,res3[0]['updated_on'])
        # The following 2 tests are to confirm the date string is in the correct format
        self.assertEqual(3, len(res3[0]['updated_on'].split('-')))
        self.assertEqual(3, len(res3[0]['updated_on'].split(':')))
        # drop DB
        self.conn.drop_database(masarconfig.get('mongodb', 'database'))
        utils.close(self.conn)
示例#7
0
    def testUpdateconfig(self):
        """"""
        name = "SR_All_20140421"
        params = {
            "desc":
            "SR daily SCR setpoint without IS kick and septum: SR and RF",
            "system": "SR",
            "status": "active",
            "version": 20140421,
        }
        with self.assertRaises(RuntimeError) as context:
            updateconfig(self.conn, self.collection, None)
        self.assertEqual(context.exception.message,
                         "Cannot identify configuration to update.")
        time.sleep(1)
        with self.assertRaises(RuntimeError) as context:
            updateconfig(self.conn, self.collection, name)
        self.assertEqual(context.exception.message,
                         "Wrong Mongo document for %s" % name)

        newid = saveconfig(self.conn, self.collection, name, **params)
        res0 = retrieveconfig(self.conn, self.collection, name)
        self.assertTrue(
            updateconfig(self.conn, self.collection, name, status="inactive"))
        res1 = retrieveconfig(self.conn, self.collection, name)
        self.assertEqual(newid, res0[0]["_id"])
        self.assertEqual(newid, res1[0]["_id"])
        self.assertEqual(res0[0]["status"], "active")
        self.assertEqual(res1[0]["status"], "inactive")
        self.assertEqual(res1[0]["created_on"], res0[0]["created_on"])
        time.sleep(1)  # delay required for below updated_on inequality test
        self.assertTrue(
            updateconfig(self.conn, self.collection, name, status="active"))
        res2 = retrieveconfig(self.conn, self.collection, name)
        self.assertEqual(res2[0]["status"], "active")
        self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"])
        self.assertEqual(res1[0]["created_on"], res2[0]["created_on"])
        self.assertEqual(res1[0]["created_on"], res0[0]["created_on"])
        pvs = [
            "RF{Osc:1}Freq:I", "SR-RF{CFC:D}E:Fb-SP", "SR-RF{CFC:D}Phs:Fb-SP",
            "SR-RF{CFC:D}Tuner:PhaOff-SP", "SR:C01-MG{PS:BT1A}I:Sp1-SP",
            "SR:C01-MG{PS:BT1A}I:Sp2-SP", "SR:C01-MG{PS:CH1B}I:Sp1-SP",
            "SR:C01-MG{PS:CH1B}I:Sp2-SP", "SR:C01-MG{PS:CH2B}I:Sp1-SP",
            "SR:C01-MG{PS:CH2B}I:Sp2-SP", "SR:C01-MG{PS:CL1A}I:Sp1-SP",
            "SR:C01-MG{PS:CL1A}I:Sp2-SP", "SR:C01-MG{PS:CL2A}I:Sp1-SP",
            "SR:C01-MG{PS:CL2A}I:Sp2-SP", "SR:C01-MG{PS:CM1A}I:Sp1-SP",
            "SR:C01-MG{PS:CM1A}I:Sp2-SP", "SR:C01-MG{PS:CM1B}I:Sp1-SP",
            "SR:C01-MG{PS:CM1B}I:Sp2-SP", "SR:C01-MG{PS:QH1B}I:Sp1-SP",
            "SR:C01-MG{PS:QH2B}I:Sp1-SP", "SR:C01-MG{PS:QH3B}I:Sp1-SP",
            "SR:C01-MG{PS:QL1A}I:Sp1-SP", "SR:C01-MG{PS:QL2A}I:Sp1-SP",
            "SR:C01-MG{PS:QL3A}I:Sp1-SP", "SR:C01-MG{PS:QM1A}I:Sp1-SP",
            "SR:C01-MG{PS:QM1B}I:Sp1-SP", "SR:C01-MG{PS:QM2A}I:Sp1-SP",
            "SR:C01-MG{PS:QM2B}I:Sp1-SP", "SR:C01-MG{PS:SH4-P2}I:Sp1-SP",
            "SR:C01-MG{PS:SM1A-P2}I:Sp1-SP", "SR:C01-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C02-MG{PS:BT1A}I:Sp1-SP", "SR:C02-MG{PS:BT1A}I:Sp2-SP",
            "SR:C02-MG{PS:CH1A}I:Sp1-SP", "SR:C02-MG{PS:CH1A}I:Sp2-SP",
            "SR:C02-MG{PS:CH2A}I:Sp1-SP", "SR:C02-MG{PS:CH2A}I:Sp2-SP",
            "SR:C02-MG{PS:CL1B}I:Sp1-SP", "SR:C02-MG{PS:CL1B}I:Sp2-SP",
            "SR:C02-MG{PS:CL2B}I:Sp1-SP", "SR:C02-MG{PS:CL2B}I:Sp2-SP",
            "SR:C02-MG{PS:CM1A}I:Sp1-SP", "SR:C02-MG{PS:CM1A}I:Sp2-SP",
            "SR:C02-MG{PS:CM1B}I:Sp1-SP", "SR:C02-MG{PS:CM1B}I:Sp2-SP",
            "SR:C02-MG{PS:QH1A}I:Sp1-SP", "SR:C02-MG{PS:QH2A}I:Sp1-SP",
            "SR:C02-MG{PS:QH3A}I:Sp1-SP", "SR:C02-MG{PS:QL1B}I:Sp1-SP",
            "SR:C02-MG{PS:QL2B}I:Sp1-SP", "SR:C02-MG{PS:QL3B}I:Sp1-SP",
            "SR:C02-MG{PS:QM1A}I:Sp1-SP", "SR:C02-MG{PS:QM1B}I:Sp1-SP",
            "SR:C02-MG{PS:QM2A}I:Sp1-SP", "SR:C02-MG{PS:QM2B}I:Sp1-SP",
            "SR:C02-MG{PS:SM1B-P2}I:Sp1-SP", "SR:C02-MG{PS:SM2B-P2}I:Sp1-SP",
            "SR:C02-MG{PS:SQKH1A}I:Sp1-SP", "SR:C03-MG{PS:BT1A}I:Sp1-SP",
            "SR:C03-MG{PS:BT1A}I:Sp2-SP", "SR:C03-MG{PS:CH1B}I:Sp1-SP",
            "SR:C03-MG{PS:CH1B}I:Sp2-SP", "SR:C03-MG{PS:CH2B}I:Sp1-SP",
            "SR:C03-MG{PS:CH2B}I:Sp2-SP", "SR:C03-MG{PS:CL1A}I:Sp1-SP",
            "SR:C03-MG{PS:CL1A}I:Sp2-SP", "SR:C03-MG{PS:CL2A}I:Sp1-SP",
            "SR:C03-MG{PS:CL2A}I:Sp2-SP", "SR:C03-MG{PS:CM1A}I:Sp1-SP",
            "SR:C03-MG{PS:CM1A}I:Sp2-SP", "SR:C03-MG{PS:CM1B}I:Sp1-SP",
            "SR:C03-MG{PS:CM1B}I:Sp2-SP", "SR:C03-MG{PS:D-SP}I:Sp1-SP",
            "SR:C03-MG{PS:QH1B}I:Sp1-SP", "SR:C03-MG{PS:QH2B}I:Sp1-SP",
            "SR:C03-MG{PS:QH3B}I:Sp1-SP", "SR:C03-MG{PS:QL1A}I:Sp1-SP",
            "SR:C03-MG{PS:QL2A}I:Sp1-SP", "SR:C03-MG{PS:QL3A}I:Sp1-SP",
            "SR:C03-MG{PS:QM1A}I:Sp1-SP", "SR:C03-MG{PS:QM1B}I:Sp1-SP",
            "SR:C03-MG{PS:QM2A}I:Sp1-SP", "SR:C03-MG{PS:QM2B}I:Sp1-SP",
            "SR:C03-MG{PS:SL2-P2}I:Sp1-SP", "SR:C03-MG{PS:SL3-P2}I:Sp1-SP",
            "SR:C03-MG{PS:SQKM1A}I:Sp1-SP", "SR:C04-MG{PS:BT1A}I:Sp1-SP",
            "SR:C04-MG{PS:BT1A}I:Sp2-SP", "SR:C04-MG{PS:CH1A}I:Sp1-SP",
            "SR:C04-MG{PS:CH1A}I:Sp2-SP", "SR:C04-MG{PS:CH2A}I:Sp1-SP",
            "SR:C04-MG{PS:CH2A}I:Sp2-SP", "SR:C04-MG{PS:CL1B}I:Sp1-SP",
            "SR:C04-MG{PS:CL1B}I:Sp2-SP", "SR:C04-MG{PS:CL2B}I:Sp1-SP",
            "SR:C04-MG{PS:CL2B}I:Sp2-SP", "SR:C04-MG{PS:CM1A}I:Sp1-SP",
            "SR:C04-MG{PS:CM1A}I:Sp2-SP", "SR:C04-MG{PS:CM1B}I:Sp1-SP",
            "SR:C04-MG{PS:CM1B}I:Sp2-SP", "SR:C04-MG{PS:QH1A}I:Sp1-SP",
            "SR:C04-MG{PS:QH2A}I:Sp1-SP", "SR:C04-MG{PS:QH3A}I:Sp1-SP",
            "SR:C04-MG{PS:QL1B}I:Sp1-SP", "SR:C04-MG{PS:QL2B}I:Sp1-SP",
            "SR:C04-MG{PS:QL3B}I:Sp1-SP", "SR:C04-MG{PS:QM1A}I:Sp1-SP",
            "SR:C04-MG{PS:QM1B}I:Sp1-SP", "SR:C04-MG{PS:QM2A}I:Sp1-SP",
            "SR:C04-MG{PS:QM2B}I:Sp1-SP", "SR:C04-MG{PS:SL1-P2}I:Sp1-SP",
            "SR:C04-MG{PS:SQKH1A}I:Sp1-SP", "SR:C05-MG{PS:BT1A}I:Sp1-SP",
            "SR:C05-MG{PS:BT1A}I:Sp2-SP", "SR:C05-MG{PS:CH1B}I:Sp1-SP",
            "SR:C05-MG{PS:CH1B}I:Sp2-SP", "SR:C05-MG{PS:CH2B}I:Sp1-SP",
            "SR:C05-MG{PS:CH2B}I:Sp2-SP", "SR:C05-MG{PS:CL1A}I:Sp1-SP",
            "SR:C05-MG{PS:CL1A}I:Sp2-SP", "SR:C05-MG{PS:CL2A}I:Sp1-SP",
            "SR:C05-MG{PS:CL2A}I:Sp2-SP", "SR:C05-MG{PS:CM1A}I:Sp1-SP",
            "SR:C05-MG{PS:CM1A}I:Sp2-SP", "SR:C05-MG{PS:CM1B}I:Sp1-SP",
            "SR:C05-MG{PS:CM1B}I:Sp2-SP", "SR:C05-MG{PS:QH1B}I:Sp1-SP",
            "SR:C05-MG{PS:QH2B}I:Sp1-SP", "SR:C05-MG{PS:QH3B}I:Sp1-SP",
            "SR:C05-MG{PS:QL1A}I:Sp1-SP", "SR:C05-MG{PS:QL2A}I:Sp1-SP",
            "SR:C05-MG{PS:QL3A}I:Sp1-SP", "SR:C05-MG{PS:QM1A}I:Sp1-SP",
            "SR:C05-MG{PS:QM1B}I:Sp1-SP", "SR:C05-MG{PS:QM2A}I:Sp1-SP",
            "SR:C05-MG{PS:QM2B}I:Sp1-SP", "SR:C05-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C06-MG{PS:BT1A}I:Sp1-SP", "SR:C06-MG{PS:BT1A}I:Sp2-SP",
            "SR:C06-MG{PS:CH1A}I:Sp1-SP", "SR:C06-MG{PS:CH1A}I:Sp2-SP",
            "SR:C06-MG{PS:CH2A}I:Sp1-SP", "SR:C06-MG{PS:CH2A}I:Sp2-SP",
            "SR:C06-MG{PS:CL1B}I:Sp1-SP", "SR:C06-MG{PS:CL1B}I:Sp2-SP",
            "SR:C06-MG{PS:CL2B}I:Sp1-SP", "SR:C06-MG{PS:CL2B}I:Sp2-SP",
            "SR:C06-MG{PS:CM1A}I:Sp1-SP", "SR:C06-MG{PS:CM1A}I:Sp2-SP",
            "SR:C06-MG{PS:CM1B}I:Sp1-SP", "SR:C06-MG{PS:CM1B}I:Sp2-SP",
            "SR:C06-MG{PS:QH1A}I:Sp1-SP", "SR:C06-MG{PS:QH2A}I:Sp1-SP",
            "SR:C06-MG{PS:QH3A}I:Sp1-SP", "SR:C06-MG{PS:QL1B}I:Sp1-SP",
            "SR:C06-MG{PS:QL2B}I:Sp1-SP", "SR:C06-MG{PS:QL3B}I:Sp1-SP",
            "SR:C06-MG{PS:QM1A}I:Sp1-SP", "SR:C06-MG{PS:QM1B}I:Sp1-SP",
            "SR:C06-MG{PS:QM2A}I:Sp1-SP", "SR:C06-MG{PS:QM2B}I:Sp1-SP",
            "SR:C06-MG{PS:SH1-P3}I:Sp1-SP", "SR:C06-MG{PS:SH3-P3}I:Sp1-SP",
            "SR:C06-MG{PS:SQKH1A}I:Sp1-SP", "SR:C07-MG{PS:BT1A}I:Sp1-SP",
            "SR:C07-MG{PS:BT1A}I:Sp2-SP", "SR:C07-MG{PS:CH1B}I:Sp1-SP",
            "SR:C07-MG{PS:CH1B}I:Sp2-SP", "SR:C07-MG{PS:CH2B}I:Sp1-SP",
            "SR:C07-MG{PS:CH2B}I:Sp2-SP", "SR:C07-MG{PS:CL1A}I:Sp1-SP",
            "SR:C07-MG{PS:CL1A}I:Sp2-SP", "SR:C07-MG{PS:CL2A}I:Sp1-SP",
            "SR:C07-MG{PS:CL2A}I:Sp2-SP", "SR:C07-MG{PS:CM1A}I:Sp1-SP",
            "SR:C07-MG{PS:CM1A}I:Sp2-SP", "SR:C07-MG{PS:CM1B}I:Sp1-SP",
            "SR:C07-MG{PS:CM1B}I:Sp2-SP", "SR:C07-MG{PS:QH1B}I:Sp1-SP",
            "SR:C07-MG{PS:QH2B}I:Sp1-SP", "SR:C07-MG{PS:QH3B}I:Sp1-SP",
            "SR:C07-MG{PS:QL1A}I:Sp1-SP", "SR:C07-MG{PS:QL2A}I:Sp1-SP",
            "SR:C07-MG{PS:QL3A}I:Sp1-SP", "SR:C07-MG{PS:QM1A}I:Sp1-SP",
            "SR:C07-MG{PS:QM1B}I:Sp1-SP", "SR:C07-MG{PS:QM2A}I:Sp1-SP",
            "SR:C07-MG{PS:QM2B}I:Sp1-SP", "SR:C07-MG{PS:SH4-P3}I:Sp1-SP",
            "SR:C07-MG{PS:SM1A-P3}I:Sp1-SP", "SR:C07-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C08-MG{PS:BT1A}I:Sp1-SP", "SR:C08-MG{PS:BT1A}I:Sp2-SP",
            "SR:C08-MG{PS:CH1A}I:Sp1-SP", "SR:C08-MG{PS:CH1A}I:Sp2-SP",
            "SR:C08-MG{PS:CH2A}I:Sp1-SP", "SR:C08-MG{PS:CH2A}I:Sp2-SP",
            "SR:C08-MG{PS:CL1B}I:Sp1-SP", "SR:C08-MG{PS:CL1B}I:Sp2-SP",
            "SR:C08-MG{PS:CL2B}I:Sp1-SP", "SR:C08-MG{PS:CL2B}I:Sp2-SP",
            "SR:C08-MG{PS:CM1A}I:Sp1-SP", "SR:C08-MG{PS:CM1A}I:Sp2-SP",
            "SR:C08-MG{PS:CM1B}I:Sp1-SP", "SR:C08-MG{PS:CM1B}I:Sp2-SP",
            "SR:C08-MG{PS:QH1A}I:Sp1-SP", "SR:C08-MG{PS:QH2A}I:Sp1-SP",
            "SR:C08-MG{PS:QH3A}I:Sp1-SP", "SR:C08-MG{PS:QL1B}I:Sp1-SP",
            "SR:C08-MG{PS:QL2B}I:Sp1-SP", "SR:C08-MG{PS:QL3B}I:Sp1-SP",
            "SR:C08-MG{PS:QM1A}I:Sp1-SP", "SR:C08-MG{PS:QM1B}I:Sp1-SP",
            "SR:C08-MG{PS:QM2A}I:Sp1-SP", "SR:C08-MG{PS:QM2B}I:Sp1-SP",
            "SR:C08-MG{PS:SH1-DW08}I:Sp1-SP", "SR:C08-MG{PS:SH3-DW08}I:Sp1-SP",
            "SR:C08-MG{PS:SH4-DW08}I:Sp1-SP", "SR:C08-MG{PS:SM1B-P3}I:Sp1-SP",
            "SR:C08-MG{PS:SM2B-P3}I:Sp1-SP", "SR:C08-MG{PS:SQKH1A}I:Sp1-SP",
            "SR:C09-MG{PS:BT1A}I:Sp1-SP", "SR:C09-MG{PS:BT1A}I:Sp2-SP",
            "SR:C09-MG{PS:CH1B}I:Sp1-SP", "SR:C09-MG{PS:CH1B}I:Sp2-SP",
            "SR:C09-MG{PS:CH2B}I:Sp1-SP", "SR:C09-MG{PS:CH2B}I:Sp2-SP",
            "SR:C09-MG{PS:CL1A}I:Sp1-SP", "SR:C09-MG{PS:CL1A}I:Sp2-SP",
            "SR:C09-MG{PS:CL2A}I:Sp1-SP", "SR:C09-MG{PS:CL2A}I:Sp2-SP",
            "SR:C09-MG{PS:CM1A}I:Sp1-SP", "SR:C09-MG{PS:CM1A}I:Sp2-SP",
            "SR:C09-MG{PS:CM1B}I:Sp1-SP", "SR:C09-MG{PS:CM1B}I:Sp2-SP",
            "SR:C09-MG{PS:QH1B}I:Sp1-SP", "SR:C09-MG{PS:QH2B}I:Sp1-SP",
            "SR:C09-MG{PS:QH3B}I:Sp1-SP", "SR:C09-MG{PS:QL1A}I:Sp1-SP",
            "SR:C09-MG{PS:QL2A}I:Sp1-SP", "SR:C09-MG{PS:QL3A}I:Sp1-SP",
            "SR:C09-MG{PS:QM1A}I:Sp1-SP", "SR:C09-MG{PS:QM1B}I:Sp1-SP",
            "SR:C09-MG{PS:QM2A}I:Sp1-SP", "SR:C09-MG{PS:QM2B}I:Sp1-SP",
            "SR:C09-MG{PS:SL2-P3}I:Sp1-SP", "SR:C09-MG{PS:SL3-P3}I:Sp1-SP",
            "SR:C09-MG{PS:SQKM1A}I:Sp1-SP", "SR:C10-MG{PS:BT1A}I:Sp1-SP",
            "SR:C10-MG{PS:BT1A}I:Sp2-SP", "SR:C10-MG{PS:CH1A}I:Sp1-SP",
            "SR:C10-MG{PS:CH1A}I:Sp2-SP", "SR:C10-MG{PS:CH2A}I:Sp1-SP",
            "SR:C10-MG{PS:CH2A}I:Sp2-SP", "SR:C10-MG{PS:CL1B}I:Sp1-SP",
            "SR:C10-MG{PS:CL1B}I:Sp2-SP", "SR:C10-MG{PS:CL2B}I:Sp1-SP",
            "SR:C10-MG{PS:CL2B}I:Sp2-SP", "SR:C10-MG{PS:CM1A}I:Sp1-SP",
            "SR:C10-MG{PS:CM1A}I:Sp2-SP", "SR:C10-MG{PS:CM1B}I:Sp1-SP",
            "SR:C10-MG{PS:CM1B}I:Sp2-SP", "SR:C10-MG{PS:QH1A}I:Sp1-SP",
            "SR:C10-MG{PS:QH2A}I:Sp1-SP", "SR:C10-MG{PS:QH3A}I:Sp1-SP",
            "SR:C10-MG{PS:QL1B}I:Sp1-SP", "SR:C10-MG{PS:QL2B}I:Sp1-SP",
            "SR:C10-MG{PS:QL3B}I:Sp1-SP", "SR:C10-MG{PS:QM1A}I:Sp1-SP",
            "SR:C10-MG{PS:QM1B}I:Sp1-SP", "SR:C10-MG{PS:QM2A}I:Sp1-SP",
            "SR:C10-MG{PS:QM2B}I:Sp1-SP", "SR:C10-MG{PS:SL1-P3}I:Sp1-SP",
            "SR:C10-MG{PS:SQKH1A}I:Sp1-SP", "SR:C11-MG{PS:BT1A}I:Sp1-SP",
            "SR:C11-MG{PS:BT1A}I:Sp2-SP", "SR:C11-MG{PS:CH1B}I:Sp1-SP",
            "SR:C11-MG{PS:CH1B}I:Sp2-SP", "SR:C11-MG{PS:CH2B}I:Sp1-SP",
            "SR:C11-MG{PS:CH2B}I:Sp2-SP", "SR:C11-MG{PS:CL1A}I:Sp1-SP",
            "SR:C11-MG{PS:CL1A}I:Sp2-SP", "SR:C11-MG{PS:CL2A}I:Sp1-SP",
            "SR:C11-MG{PS:CL2A}I:Sp2-SP", "SR:C11-MG{PS:CM1A}I:Sp1-SP",
            "SR:C11-MG{PS:CM1A}I:Sp2-SP", "SR:C11-MG{PS:CM1B}I:Sp1-SP",
            "SR:C11-MG{PS:CM1B}I:Sp2-SP", "SR:C11-MG{PS:QH1B}I:Sp1-SP",
            "SR:C11-MG{PS:QH2B}I:Sp1-SP", "SR:C11-MG{PS:QH3B}I:Sp1-SP",
            "SR:C11-MG{PS:QL1A}I:Sp1-SP", "SR:C11-MG{PS:QL2A}I:Sp1-SP",
            "SR:C11-MG{PS:QL3A}I:Sp1-SP", "SR:C11-MG{PS:QM1A}I:Sp1-SP",
            "SR:C11-MG{PS:QM1B}I:Sp1-SP", "SR:C11-MG{PS:QM2A}I:Sp1-SP",
            "SR:C11-MG{PS:QM2B}I:Sp1-SP", "SR:C11-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C12-MG{PS:BT1A}I:Sp1-SP", "SR:C12-MG{PS:BT1A}I:Sp2-SP",
            "SR:C12-MG{PS:CH1A}I:Sp1-SP", "SR:C12-MG{PS:CH1A}I:Sp2-SP",
            "SR:C12-MG{PS:CH2A}I:Sp1-SP", "SR:C12-MG{PS:CH2A}I:Sp2-SP",
            "SR:C12-MG{PS:CL1B}I:Sp1-SP", "SR:C12-MG{PS:CL1B}I:Sp2-SP",
            "SR:C12-MG{PS:CL2B}I:Sp1-SP", "SR:C12-MG{PS:CL2B}I:Sp2-SP",
            "SR:C12-MG{PS:CM1A}I:Sp1-SP", "SR:C12-MG{PS:CM1A}I:Sp2-SP",
            "SR:C12-MG{PS:CM1B}I:Sp1-SP", "SR:C12-MG{PS:CM1B}I:Sp2-SP",
            "SR:C12-MG{PS:QH1A}I:Sp1-SP", "SR:C12-MG{PS:QH2A}I:Sp1-SP",
            "SR:C12-MG{PS:QH3A}I:Sp1-SP", "SR:C12-MG{PS:QL1B}I:Sp1-SP",
            "SR:C12-MG{PS:QL2B}I:Sp1-SP", "SR:C12-MG{PS:QL3B}I:Sp1-SP",
            "SR:C12-MG{PS:QM1A}I:Sp1-SP", "SR:C12-MG{PS:QM1B}I:Sp1-SP",
            "SR:C12-MG{PS:QM2A}I:Sp1-SP", "SR:C12-MG{PS:QM2B}I:Sp1-SP",
            "SR:C12-MG{PS:SH1-P4}I:Sp1-SP", "SR:C12-MG{PS:SH3-P4}I:Sp1-SP",
            "SR:C12-MG{PS:SQKH1A}I:Sp1-SP", "SR:C13-MG{PS:BT1A}I:Sp1-SP",
            "SR:C13-MG{PS:BT1A}I:Sp2-SP", "SR:C13-MG{PS:CH1B}I:Sp1-SP",
            "SR:C13-MG{PS:CH1B}I:Sp2-SP", "SR:C13-MG{PS:CH2B}I:Sp1-SP",
            "SR:C13-MG{PS:CH2B}I:Sp2-SP", "SR:C13-MG{PS:CL1A}I:Sp1-SP",
            "SR:C13-MG{PS:CL1A}I:Sp2-SP", "SR:C13-MG{PS:CL2A}I:Sp1-SP",
            "SR:C13-MG{PS:CL2A}I:Sp2-SP", "SR:C13-MG{PS:CM1A}I:Sp1-SP",
            "SR:C13-MG{PS:CM1A}I:Sp2-SP", "SR:C13-MG{PS:CM1B}I:Sp1-SP",
            "SR:C13-MG{PS:CM1B}I:Sp2-SP", "SR:C13-MG{PS:QH1B}I:Sp1-SP",
            "SR:C13-MG{PS:QH2B}I:Sp1-SP", "SR:C13-MG{PS:QH3B}I:Sp1-SP",
            "SR:C13-MG{PS:QL1A}I:Sp1-SP", "SR:C13-MG{PS:QL2A}I:Sp1-SP",
            "SR:C13-MG{PS:QL3A}I:Sp1-SP", "SR:C13-MG{PS:QM1A}I:Sp1-SP",
            "SR:C13-MG{PS:QM1B}I:Sp1-SP", "SR:C13-MG{PS:QM2A}I:Sp1-SP",
            "SR:C13-MG{PS:QM2B}I:Sp1-SP", "SR:C13-MG{PS:SH4-P4}I:Sp1-SP",
            "SR:C13-MG{PS:SM1A-P4}I:Sp1-SP", "SR:C13-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C14-MG{PS:BT1A}I:Sp1-SP", "SR:C14-MG{PS:BT1A}I:Sp2-SP",
            "SR:C14-MG{PS:CH1A}I:Sp1-SP", "SR:C14-MG{PS:CH1A}I:Sp2-SP",
            "SR:C14-MG{PS:CH2A}I:Sp1-SP", "SR:C14-MG{PS:CH2A}I:Sp2-SP",
            "SR:C14-MG{PS:CL1B}I:Sp1-SP", "SR:C14-MG{PS:CL1B}I:Sp2-SP",
            "SR:C14-MG{PS:CL2B}I:Sp1-SP", "SR:C14-MG{PS:CL2B}I:Sp2-SP",
            "SR:C14-MG{PS:CM1A}I:Sp1-SP", "SR:C14-MG{PS:CM1A}I:Sp2-SP",
            "SR:C14-MG{PS:CM1B}I:Sp1-SP", "SR:C14-MG{PS:CM1B}I:Sp2-SP",
            "SR:C14-MG{PS:QH1A}I:Sp1-SP", "SR:C14-MG{PS:QH2A}I:Sp1-SP",
            "SR:C14-MG{PS:QH3A}I:Sp1-SP", "SR:C14-MG{PS:QL1B}I:Sp1-SP",
            "SR:C14-MG{PS:QL2B}I:Sp1-SP", "SR:C14-MG{PS:QL3B}I:Sp1-SP",
            "SR:C14-MG{PS:QM1A}I:Sp1-SP", "SR:C14-MG{PS:QM1B}I:Sp1-SP",
            "SR:C14-MG{PS:QM2A}I:Sp1-SP", "SR:C14-MG{PS:QM2B}I:Sp1-SP",
            "SR:C14-MG{PS:SM1B-P4}I:Sp1-SP", "SR:C14-MG{PS:SM2B-P4}I:Sp1-SP",
            "SR:C14-MG{PS:SQKH1A}I:Sp1-SP", "SR:C15-MG{PS:BT1A}I:Sp1-SP",
            "SR:C15-MG{PS:BT1A}I:Sp2-SP", "SR:C15-MG{PS:CH1B}I:Sp1-SP",
            "SR:C15-MG{PS:CH1B}I:Sp2-SP", "SR:C15-MG{PS:CH2B}I:Sp1-SP",
            "SR:C15-MG{PS:CH2B}I:Sp2-SP", "SR:C15-MG{PS:CL1A}I:Sp1-SP",
            "SR:C15-MG{PS:CL1A}I:Sp2-SP", "SR:C15-MG{PS:CL2A}I:Sp1-SP",
            "SR:C15-MG{PS:CL2A}I:Sp2-SP", "SR:C15-MG{PS:CM1A}I:Sp1-SP",
            "SR:C15-MG{PS:CM1A}I:Sp2-SP", "SR:C15-MG{PS:CM1B}I:Sp1-SP",
            "SR:C15-MG{PS:CM1B}I:Sp2-SP", "SR:C15-MG{PS:QH1B}I:Sp1-SP",
            "SR:C15-MG{PS:QH2B}I:Sp1-SP", "SR:C15-MG{PS:QH3B}I:Sp1-SP",
            "SR:C15-MG{PS:QL1A}I:Sp1-SP", "SR:C15-MG{PS:QL2A}I:Sp1-SP",
            "SR:C15-MG{PS:QL3A}I:Sp1-SP", "SR:C15-MG{PS:QM1A}I:Sp1-SP",
            "SR:C15-MG{PS:QM1B}I:Sp1-SP", "SR:C15-MG{PS:QM2A}I:Sp1-SP",
            "SR:C15-MG{PS:QM2B}I:Sp1-SP", "SR:C15-MG{PS:SL2-P4}I:Sp1-SP",
            "SR:C15-MG{PS:SL3-P4}I:Sp1-SP", "SR:C15-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C16-MG{PS:BT1A}I:Sp1-SP", "SR:C16-MG{PS:BT1A}I:Sp2-SP",
            "SR:C16-MG{PS:CH1A}I:Sp1-SP", "SR:C16-MG{PS:CH1A}I:Sp2-SP",
            "SR:C16-MG{PS:CH2A}I:Sp1-SP", "SR:C16-MG{PS:CH2A}I:Sp2-SP",
            "SR:C16-MG{PS:CL1B}I:Sp1-SP", "SR:C16-MG{PS:CL1B}I:Sp2-SP",
            "SR:C16-MG{PS:CL2B}I:Sp1-SP", "SR:C16-MG{PS:CL2B}I:Sp2-SP",
            "SR:C16-MG{PS:CM1A}I:Sp1-SP", "SR:C16-MG{PS:CM1A}I:Sp2-SP",
            "SR:C16-MG{PS:CM1B}I:Sp1-SP", "SR:C16-MG{PS:CM1B}I:Sp2-SP",
            "SR:C16-MG{PS:QH1A}I:Sp1-SP", "SR:C16-MG{PS:QH2A}I:Sp1-SP",
            "SR:C16-MG{PS:QH3A}I:Sp1-SP", "SR:C16-MG{PS:QL1B}I:Sp1-SP",
            "SR:C16-MG{PS:QL2B}I:Sp1-SP", "SR:C16-MG{PS:QL3B}I:Sp1-SP",
            "SR:C16-MG{PS:QM1A}I:Sp1-SP", "SR:C16-MG{PS:QM1B}I:Sp1-SP",
            "SR:C16-MG{PS:QM2A}I:Sp1-SP", "SR:C16-MG{PS:QM2B}I:Sp1-SP",
            "SR:C16-MG{PS:SL1-P4}I:Sp1-SP", "SR:C16-MG{PS:SQKH1A}I:Sp1-SP",
            "SR:C17-MG{PS:BT1A}I:Sp1-SP", "SR:C17-MG{PS:BT1A}I:Sp2-SP",
            "SR:C17-MG{PS:CH1B}I:Sp1-SP", "SR:C17-MG{PS:CH1B}I:Sp2-SP",
            "SR:C17-MG{PS:CH2B}I:Sp1-SP", "SR:C17-MG{PS:CH2B}I:Sp2-SP",
            "SR:C17-MG{PS:CL1A}I:Sp1-SP", "SR:C17-MG{PS:CL1A}I:Sp2-SP",
            "SR:C17-MG{PS:CL2A}I:Sp1-SP", "SR:C17-MG{PS:CL2A}I:Sp2-SP",
            "SR:C17-MG{PS:CM1A}I:Sp1-SP", "SR:C17-MG{PS:CM1A}I:Sp2-SP",
            "SR:C17-MG{PS:CM1B}I:Sp1-SP", "SR:C17-MG{PS:CM1B}I:Sp2-SP",
            "SR:C17-MG{PS:QH1B}I:Sp1-SP", "SR:C17-MG{PS:QH2B}I:Sp1-SP",
            "SR:C17-MG{PS:QH3B}I:Sp1-SP", "SR:C17-MG{PS:QL1A}I:Sp1-SP",
            "SR:C17-MG{PS:QL2A}I:Sp1-SP", "SR:C17-MG{PS:QL3A}I:Sp1-SP",
            "SR:C17-MG{PS:QM1A}I:Sp1-SP", "SR:C17-MG{PS:QM1B}I:Sp1-SP",
            "SR:C17-MG{PS:QM2A}I:Sp1-SP", "SR:C17-MG{PS:QM2B}I:Sp1-SP",
            "SR:C17-MG{PS:SQKM1A}I:Sp1-SP", "SR:C18-MG{PS:BT1A}I:Sp1-SP",
            "SR:C18-MG{PS:BT1A}I:Sp2-SP", "SR:C18-MG{PS:CH1A}I:Sp1-SP",
            "SR:C18-MG{PS:CH1A}I:Sp2-SP", "SR:C18-MG{PS:CH2A}I:Sp1-SP",
            "SR:C18-MG{PS:CH2A}I:Sp2-SP", "SR:C18-MG{PS:CL1B}I:Sp1-SP",
            "SR:C18-MG{PS:CL1B}I:Sp2-SP", "SR:C18-MG{PS:CL2B}I:Sp1-SP",
            "SR:C18-MG{PS:CL2B}I:Sp2-SP", "SR:C18-MG{PS:CM1A}I:Sp1-SP",
            "SR:C18-MG{PS:CM1A}I:Sp2-SP", "SR:C18-MG{PS:CM1B}I:Sp1-SP",
            "SR:C18-MG{PS:CM1B}I:Sp2-SP", "SR:C18-MG{PS:QH1A}I:Sp1-SP",
            "SR:C18-MG{PS:QH2A}I:Sp1-SP", "SR:C18-MG{PS:QH3A}I:Sp1-SP",
            "SR:C18-MG{PS:QL1B}I:Sp1-SP", "SR:C18-MG{PS:QL2B}I:Sp1-SP",
            "SR:C18-MG{PS:QL3B}I:Sp1-SP", "SR:C18-MG{PS:QM1A}I:Sp1-SP",
            "SR:C18-MG{PS:QM1B}I:Sp1-SP", "SR:C18-MG{PS:QM2A}I:Sp1-SP",
            "SR:C18-MG{PS:QM2B}I:Sp1-SP", "SR:C18-MG{PS:SH1-DW18}I:Sp1-SP",
            "SR:C18-MG{PS:SH1-P5}I:Sp1-SP", "SR:C18-MG{PS:SH3-DW18}I:Sp1-SP",
            "SR:C18-MG{PS:SH3-P5}I:Sp1-SP", "SR:C18-MG{PS:SH4-DW18}I:Sp1-SP",
            "SR:C18-MG{PS:SQKH1A}I:Sp1-SP", "SR:C19-MG{PS:BT1A}I:Sp1-SP",
            "SR:C19-MG{PS:BT1A}I:Sp2-SP", "SR:C19-MG{PS:CH1B}I:Sp1-SP",
            "SR:C19-MG{PS:CH1B}I:Sp2-SP", "SR:C19-MG{PS:CH2B}I:Sp1-SP",
            "SR:C19-MG{PS:CH2B}I:Sp2-SP", "SR:C19-MG{PS:CL1A}I:Sp1-SP",
            "SR:C19-MG{PS:CL1A}I:Sp2-SP", "SR:C19-MG{PS:CL2A}I:Sp1-SP",
            "SR:C19-MG{PS:CL2A}I:Sp2-SP", "SR:C19-MG{PS:CM1A}I:Sp1-SP",
            "SR:C19-MG{PS:CM1A}I:Sp2-SP", "SR:C19-MG{PS:CM1B}I:Sp1-SP",
            "SR:C19-MG{PS:CM1B}I:Sp2-SP", "SR:C19-MG{PS:QH1B}I:Sp1-SP",
            "SR:C19-MG{PS:QH2B}I:Sp1-SP", "SR:C19-MG{PS:QH3B}I:Sp1-SP",
            "SR:C19-MG{PS:QL1A}I:Sp1-SP", "SR:C19-MG{PS:QL2A}I:Sp1-SP",
            "SR:C19-MG{PS:QL3A}I:Sp1-SP", "SR:C19-MG{PS:QM1A}I:Sp1-SP",
            "SR:C19-MG{PS:QM1B}I:Sp1-SP", "SR:C19-MG{PS:QM2A}I:Sp1-SP",
            "SR:C19-MG{PS:QM2B}I:Sp1-SP", "SR:C19-MG{PS:SH4-P5}I:Sp1-SP",
            "SR:C19-MG{PS:SM1A-P5}I:Sp1-SP", "SR:C19-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C20-MG{PS:BT1A}I:Sp1-SP", "SR:C20-MG{PS:BT1A}I:Sp2-SP",
            "SR:C20-MG{PS:CH1A}I:Sp1-SP", "SR:C20-MG{PS:CH1A}I:Sp2-SP",
            "SR:C20-MG{PS:CH2A}I:Sp1-SP", "SR:C20-MG{PS:CH2A}I:Sp2-SP",
            "SR:C20-MG{PS:CL1B}I:Sp1-SP", "SR:C20-MG{PS:CL1B}I:Sp2-SP",
            "SR:C20-MG{PS:CL2B}I:Sp1-SP", "SR:C20-MG{PS:CL2B}I:Sp2-SP",
            "SR:C20-MG{PS:CM1A}I:Sp1-SP", "SR:C20-MG{PS:CM1A}I:Sp2-SP",
            "SR:C20-MG{PS:CM1B}I:Sp1-SP", "SR:C20-MG{PS:CM1B}I:Sp2-SP",
            "SR:C20-MG{PS:QH1A}I:Sp1-SP", "SR:C20-MG{PS:QH2A}I:Sp1-SP",
            "SR:C20-MG{PS:QH3A}I:Sp1-SP", "SR:C20-MG{PS:QL1B}I:Sp1-SP",
            "SR:C20-MG{PS:QL2B}I:Sp1-SP", "SR:C20-MG{PS:QL3B}I:Sp1-SP",
            "SR:C20-MG{PS:QM1A}I:Sp1-SP", "SR:C20-MG{PS:QM1B}I:Sp1-SP",
            "SR:C20-MG{PS:QM2A}I:Sp1-SP", "SR:C20-MG{PS:QM2B}I:Sp1-SP",
            "SR:C20-MG{PS:SM1B-P5}I:Sp1-SP", "SR:C20-MG{PS:SM2B-P5}I:Sp1-SP",
            "SR:C20-MG{PS:SQKH1A}I:Sp1-SP", "SR:C21-MG{PS:BT1A}I:Sp1-SP",
            "SR:C21-MG{PS:BT1A}I:Sp2-SP", "SR:C21-MG{PS:CH1B}I:Sp1-SP",
            "SR:C21-MG{PS:CH1B}I:Sp2-SP", "SR:C21-MG{PS:CH2B}I:Sp1-SP",
            "SR:C21-MG{PS:CH2B}I:Sp2-SP", "SR:C21-MG{PS:CL1A}I:Sp1-SP",
            "SR:C21-MG{PS:CL1A}I:Sp2-SP", "SR:C21-MG{PS:CL2A}I:Sp1-SP",
            "SR:C21-MG{PS:CL2A}I:Sp2-SP", "SR:C21-MG{PS:CM1A}I:Sp1-SP",
            "SR:C21-MG{PS:CM1A}I:Sp2-SP", "SR:C21-MG{PS:CM1B}I:Sp1-SP",
            "SR:C21-MG{PS:CM1B}I:Sp2-SP", "SR:C21-MG{PS:QH1B}I:Sp1-SP",
            "SR:C21-MG{PS:QH2B}I:Sp1-SP", "SR:C21-MG{PS:QH3B}I:Sp1-SP",
            "SR:C21-MG{PS:QL1A}I:Sp1-SP", "SR:C21-MG{PS:QL2A}I:Sp1-SP",
            "SR:C21-MG{PS:QL3A}I:Sp1-SP", "SR:C21-MG{PS:QM1A}I:Sp1-SP",
            "SR:C21-MG{PS:QM1B}I:Sp1-SP", "SR:C21-MG{PS:QM2A}I:Sp1-SP",
            "SR:C21-MG{PS:QM2B}I:Sp1-SP", "SR:C21-MG{PS:SL2-P5}I:Sp1-SP",
            "SR:C21-MG{PS:SL3-P5}I:Sp1-SP", "SR:C21-MG{PS:SQKM1A}I:Sp1-SP",
            "SR:C22-MG{PS:BT1A}I:Sp1-SP", "SR:C22-MG{PS:BT1A}I:Sp2-SP",
            "SR:C22-MG{PS:CH1A}I:Sp1-SP", "SR:C22-MG{PS:CH1A}I:Sp2-SP",
            "SR:C22-MG{PS:CH2A}I:Sp1-SP", "SR:C22-MG{PS:CH2A}I:Sp2-SP",
            "SR:C22-MG{PS:CL1B}I:Sp1-SP", "SR:C22-MG{PS:CL1B}I:Sp2-SP",
            "SR:C22-MG{PS:CL2B}I:Sp1-SP", "SR:C22-MG{PS:CL2B}I:Sp2-SP",
            "SR:C22-MG{PS:CM1A}I:Sp1-SP", "SR:C22-MG{PS:CM1A}I:Sp2-SP",
            "SR:C22-MG{PS:CM1B}I:Sp1-SP", "SR:C22-MG{PS:CM1B}I:Sp2-SP",
            "SR:C22-MG{PS:QH1A}I:Sp1-SP", "SR:C22-MG{PS:QH2A}I:Sp1-SP",
            "SR:C22-MG{PS:QH3A}I:Sp1-SP", "SR:C22-MG{PS:QL1B}I:Sp1-SP",
            "SR:C22-MG{PS:QL2B}I:Sp1-SP", "SR:C22-MG{PS:QL3B}I:Sp1-SP",
            "SR:C22-MG{PS:QM1A}I:Sp1-SP", "SR:C22-MG{PS:QM1B}I:Sp1-SP",
            "SR:C22-MG{PS:QM2A}I:Sp1-SP", "SR:C22-MG{PS:QM2B}I:Sp1-SP",
            "SR:C22-MG{PS:SL1-P5}I:Sp1-SP", "SR:C22-MG{PS:SQKH1A}I:Sp1-SP",
            "SR:C23-MG{PS:BT1A}I:Sp1-SP", "SR:C23-MG{PS:BT1A}I:Sp2-SP",
            "SR:C23-MG{PS:CH1B}I:Sp1-SP", "SR:C23-MG{PS:CH1B}I:Sp2-SP",
            "SR:C23-MG{PS:CH2B}I:Sp1-SP", "SR:C23-MG{PS:CH2B}I:Sp2-SP",
            "SR:C23-MG{PS:CL1A}I:Sp1-SP", "SR:C23-MG{PS:CL1A}I:Sp2-SP",
            "SR:C23-MG{PS:CL2A}I:Sp1-SP", "SR:C23-MG{PS:CL2A}I:Sp2-SP",
            "SR:C23-MG{PS:CM1A}I:Sp1-SP", "SR:C23-MG{PS:CM1A}I:Sp2-SP",
            "SR:C23-MG{PS:CM1B}I:Sp1-SP", "SR:C23-MG{PS:CM1B}I:Sp2-SP",
            "SR:C23-MG{PS:QH1B}I:Sp1-SP", "SR:C23-MG{PS:QH2B}I:Sp1-SP",
            "SR:C23-MG{PS:QH3B}I:Sp1-SP", "SR:C23-MG{PS:QL1A}I:Sp1-SP",
            "SR:C23-MG{PS:QL2A}I:Sp1-SP", "SR:C23-MG{PS:QL3A}I:Sp1-SP",
            "SR:C23-MG{PS:QM1A}I:Sp1-SP", "SR:C23-MG{PS:QM1B}I:Sp1-SP",
            "SR:C23-MG{PS:QM2A}I:Sp1-SP", "SR:C23-MG{PS:QM2B}I:Sp1-SP",
            "SR:C23-MG{PS:SQKM1A}I:Sp1-SP", "SR:C24-MG{PS:BT1A}I:Sp1-SP",
            "SR:C24-MG{PS:BT1A}I:Sp2-SP", "SR:C24-MG{PS:CH1A}I:Sp1-SP",
            "SR:C24-MG{PS:CH1A}I:Sp2-SP", "SR:C24-MG{PS:CH2A}I:Sp1-SP",
            "SR:C24-MG{PS:CH2A}I:Sp2-SP", "SR:C24-MG{PS:CL1B}I:Sp1-SP",
            "SR:C24-MG{PS:CL1B}I:Sp2-SP", "SR:C24-MG{PS:CL2B}I:Sp1-SP",
            "SR:C24-MG{PS:CL2B}I:Sp2-SP", "SR:C24-MG{PS:CM1A}I:Sp1-SP",
            "SR:C24-MG{PS:CM1A}I:Sp2-SP", "SR:C24-MG{PS:CM1B}I:Sp1-SP",
            "SR:C24-MG{PS:CM1B}I:Sp2-SP", "SR:C24-MG{PS:QH1A}I:Sp1-SP",
            "SR:C24-MG{PS:QH2A}I:Sp1-SP", "SR:C24-MG{PS:QH3A}I:Sp1-SP",
            "SR:C24-MG{PS:QL1B}I:Sp1-SP", "SR:C24-MG{PS:QL2B}I:Sp1-SP",
            "SR:C24-MG{PS:QL3B}I:Sp1-SP", "SR:C24-MG{PS:QM1A}I:Sp1-SP",
            "SR:C24-MG{PS:QM1B}I:Sp1-SP", "SR:C24-MG{PS:QM2A}I:Sp1-SP",
            "SR:C24-MG{PS:QM2B}I:Sp1-SP", "SR:C24-MG{PS:SH1-P1}I:Sp1-SP",
            "SR:C24-MG{PS:SH3-P1}I:Sp1-SP", "SR:C24-MG{PS:SQKH1A}I:Sp1-SP",
            "SR:C25-MG{PS:BT1A}I:Sp1-SP", "SR:C25-MG{PS:BT1A}I:Sp2-SP",
            "SR:C25-MG{PS:CH1B}I:Sp1-SP", "SR:C25-MG{PS:CH1B}I:Sp2-SP",
            "SR:C25-MG{PS:CH2B}I:Sp1-SP", "SR:C25-MG{PS:CH2B}I:Sp2-SP",
            "SR:C25-MG{PS:CL1A}I:Sp1-SP", "SR:C25-MG{PS:CL1A}I:Sp2-SP",
            "SR:C25-MG{PS:CL2A}I:Sp1-SP", "SR:C25-MG{PS:CL2A}I:Sp2-SP",
            "SR:C25-MG{PS:CM1A}I:Sp1-SP", "SR:C25-MG{PS:CM1A}I:Sp2-SP",
            "SR:C25-MG{PS:CM1B}I:Sp1-SP", "SR:C25-MG{PS:CM1B}I:Sp2-SP",
            "SR:C25-MG{PS:QH1B}I:Sp1-SP", "SR:C25-MG{PS:QH2B}I:Sp1-SP",
            "SR:C25-MG{PS:QH3B}I:Sp1-SP", "SR:C25-MG{PS:QL1A}I:Sp1-SP",
            "SR:C25-MG{PS:QL2A}I:Sp1-SP", "SR:C25-MG{PS:QL3A}I:Sp1-SP",
            "SR:C25-MG{PS:QM1A}I:Sp1-SP", "SR:C25-MG{PS:QM1B}I:Sp1-SP",
            "SR:C25-MG{PS:QM2A}I:Sp1-SP", "SR:C25-MG{PS:QM2B}I:Sp1-SP",
            "SR:C25-MG{PS:SH4-P1}I:Sp1-SP", "SR:C25-MG{PS:SM1A-P1}I:Sp1-SP",
            "SR:C25-MG{PS:SQKM1A}I:Sp1-SP", "SR:C26-MG{PS:BT1A}I:Sp1-SP",
            "SR:C26-MG{PS:BT1A}I:Sp2-SP", "SR:C26-MG{PS:CH1A}I:Sp1-SP",
            "SR:C26-MG{PS:CH1A}I:Sp2-SP", "SR:C26-MG{PS:CH2A}I:Sp1-SP",
            "SR:C26-MG{PS:CH2A}I:Sp2-SP", "SR:C26-MG{PS:CL1B}I:Sp1-SP",
            "SR:C26-MG{PS:CL1B}I:Sp2-SP", "SR:C26-MG{PS:CL2B}I:Sp1-SP",
            "SR:C26-MG{PS:CL2B}I:Sp2-SP", "SR:C26-MG{PS:CM1A}I:Sp1-SP",
            "SR:C26-MG{PS:CM1A}I:Sp2-SP", "SR:C26-MG{PS:CM1B}I:Sp1-SP",
            "SR:C26-MG{PS:CM1B}I:Sp2-SP", "SR:C26-MG{PS:QH1A}I:Sp1-SP",
            "SR:C26-MG{PS:QH2A}I:Sp1-SP", "SR:C26-MG{PS:QH3A}I:Sp1-SP",
            "SR:C26-MG{PS:QL1B}I:Sp1-SP", "SR:C26-MG{PS:QL2B}I:Sp1-SP",
            "SR:C26-MG{PS:QL3B}I:Sp1-SP", "SR:C26-MG{PS:QM1A}I:Sp1-SP",
            "SR:C26-MG{PS:QM1B}I:Sp1-SP", "SR:C26-MG{PS:QM2A}I:Sp1-SP",
            "SR:C26-MG{PS:QM2B}I:Sp1-SP", "SR:C26-MG{PS:SM1B-P1}I:Sp1-SP",
            "SR:C26-MG{PS:SM2B-P1}I:Sp1-SP", "SR:C26-MG{PS:SQKH1A}I:Sp1-SP",
            "SR:C27-MG{PS:BT1A}I:Sp1-SP", "SR:C27-MG{PS:BT1A}I:Sp2-SP",
            "SR:C27-MG{PS:CH1B}I:Sp1-SP", "SR:C27-MG{PS:CH1B}I:Sp2-SP",
            "SR:C27-MG{PS:CH2B}I:Sp1-SP", "SR:C27-MG{PS:CH2B}I:Sp2-SP",
            "SR:C27-MG{PS:CL1A}I:Sp1-SP", "SR:C27-MG{PS:CL1A}I:Sp2-SP",
            "SR:C27-MG{PS:CL2A}I:Sp1-SP", "SR:C27-MG{PS:CL2A}I:Sp2-SP",
            "SR:C27-MG{PS:CM1A}I:Sp1-SP", "SR:C27-MG{PS:CM1A}I:Sp2-SP",
            "SR:C27-MG{PS:CM1B}I:Sp1-SP", "SR:C27-MG{PS:CM1B}I:Sp2-SP",
            "SR:C27-MG{PS:QH1B}I:Sp1-SP", "SR:C27-MG{PS:QH2B}I:Sp1-SP",
            "SR:C27-MG{PS:QH3B}I:Sp1-SP", "SR:C27-MG{PS:QL1A}I:Sp1-SP",
            "SR:C27-MG{PS:QL2A}I:Sp1-SP", "SR:C27-MG{PS:QL3A}I:Sp1-SP",
            "SR:C27-MG{PS:QM1A}I:Sp1-SP", "SR:C27-MG{PS:QM1B}I:Sp1-SP",
            "SR:C27-MG{PS:QM2A}I:Sp1-SP", "SR:C27-MG{PS:QM2B}I:Sp1-SP",
            "SR:C27-MG{PS:SL2-P1}I:Sp1-SP", "SR:C27-MG{PS:SL3-P1}I:Sp1-SP",
            "SR:C27-MG{PS:SQKM1A}I:Sp1-SP", "SR:C28-MG{PS:BT1A}I:Sp1-SP",
            "SR:C28-MG{PS:BT1A}I:Sp2-SP", "SR:C28-MG{PS:CH1A}I:Sp1-SP",
            "SR:C28-MG{PS:CH1A}I:Sp2-SP", "SR:C28-MG{PS:CH2A}I:Sp1-SP",
            "SR:C28-MG{PS:CH2A}I:Sp2-SP", "SR:C28-MG{PS:CL1B}I:Sp1-SP",
            "SR:C28-MG{PS:CL1B}I:Sp2-SP", "SR:C28-MG{PS:CL2B}I:Sp1-SP",
            "SR:C28-MG{PS:CL2B}I:Sp2-SP", "SR:C28-MG{PS:CM1A}I:Sp1-SP",
            "SR:C28-MG{PS:CM1A}I:Sp2-SP", "SR:C28-MG{PS:CM1B}I:Sp1-SP",
            "SR:C28-MG{PS:CM1B}I:Sp2-SP", "SR:C28-MG{PS:QH1A}I:Sp1-SP",
            "SR:C28-MG{PS:QH2A}I:Sp1-SP", "SR:C28-MG{PS:QH3A}I:Sp1-SP",
            "SR:C28-MG{PS:QL1B}I:Sp1-SP", "SR:C28-MG{PS:QL2B}I:Sp1-SP",
            "SR:C28-MG{PS:QL3B}I:Sp1-SP", "SR:C28-MG{PS:QM1A}I:Sp1-SP",
            "SR:C28-MG{PS:QM1B}I:Sp1-SP", "SR:C28-MG{PS:QM2A}I:Sp1-SP",
            "SR:C28-MG{PS:QM2B}I:Sp1-SP", "SR:C28-MG{PS:SH1-DW28}I:Sp1-SP",
            "SR:C28-MG{PS:SH3-DW28}I:Sp1-SP", "SR:C28-MG{PS:SH4-DW28}I:Sp1-SP",
            "SR:C28-MG{PS:SL1-P1}I:Sp1-SP", "SR:C28-MG{PS:SQKH1A}I:Sp1-SP",
            "SR:C29-MG{PS:BT1A}I:Sp1-SP", "SR:C29-MG{PS:BT1A}I:Sp2-SP",
            "SR:C29-MG{PS:CH1B}I:Sp1-SP", "SR:C29-MG{PS:CH1B}I:Sp2-SP",
            "SR:C29-MG{PS:CH2B}I:Sp1-SP", "SR:C29-MG{PS:CH2B}I:Sp2-SP",
            "SR:C29-MG{PS:CL1A}I:Sp1-SP", "SR:C29-MG{PS:CL1A}I:Sp2-SP",
            "SR:C29-MG{PS:CL2A}I:Sp1-SP", "SR:C29-MG{PS:CL2A}I:Sp2-SP",
            "SR:C29-MG{PS:CM1A}I:Sp1-SP", "SR:C29-MG{PS:CM1A}I:Sp2-SP",
            "SR:C29-MG{PS:CM1B}I:Sp1-SP", "SR:C29-MG{PS:CM1B}I:Sp2-SP",
            "SR:C29-MG{PS:QH1B}I:Sp1-SP", "SR:C29-MG{PS:QH2B}I:Sp1-SP",
            "SR:C29-MG{PS:QH3B}I:Sp1-SP", "SR:C29-MG{PS:QL1A}I:Sp1-SP",
            "SR:C29-MG{PS:QL2A}I:Sp1-SP", "SR:C29-MG{PS:QL3A}I:Sp1-SP",
            "SR:C29-MG{PS:QM1A}I:Sp1-SP", "SR:C29-MG{PS:QM1B}I:Sp1-SP",
            "SR:C29-MG{PS:QM2A}I:Sp1-SP", "SR:C29-MG{PS:QM2B}I:Sp1-SP",
            "SR:C29-MG{PS:SQKM1A}I:Sp1-SP", "SR:C30-MG{PS:BT1A}I:Sp1-SP",
            "SR:C30-MG{PS:BT1A}I:Sp2-SP", "SR:C30-MG{PS:CH1A}I:Sp1-SP",
            "SR:C30-MG{PS:CH1A}I:Sp2-SP", "SR:C30-MG{PS:CH2A}I:Sp1-SP",
            "SR:C30-MG{PS:CH2A}I:Sp2-SP", "SR:C30-MG{PS:CL1B}I:Sp1-SP",
            "SR:C30-MG{PS:CL1B}I:Sp2-SP", "SR:C30-MG{PS:CL2B}I:Sp1-SP",
            "SR:C30-MG{PS:CL2B}I:Sp2-SP", "SR:C30-MG{PS:CM1A}I:Sp1-SP",
            "SR:C30-MG{PS:CM1A}I:Sp2-SP", "SR:C30-MG{PS:CM1B}I:Sp1-SP",
            "SR:C30-MG{PS:CM1B}I:Sp2-SP", "SR:C30-MG{PS:QH1A}I:Sp1-SP",
            "SR:C30-MG{PS:QH2A}I:Sp1-SP", "SR:C30-MG{PS:QH3A}I:Sp1-SP",
            "SR:C30-MG{PS:QL1B}I:Sp1-SP", "SR:C30-MG{PS:QL2B}I:Sp1-SP",
            "SR:C30-MG{PS:QL3B}I:Sp1-SP", "SR:C30-MG{PS:QM1A}I:Sp1-SP",
            "SR:C30-MG{PS:QM1B}I:Sp1-SP", "SR:C30-MG{PS:QM2A}I:Sp1-SP",
            "SR:C30-MG{PS:QM2B}I:Sp1-SP", "SR:C30-MG{PS:SH1-P2}I:Sp1-SP",
            "SR:C30-MG{PS:SH3-P2}I:Sp1-SP", "SR:C30-MG{PS:SQKH1A}I:Sp1-SP"
        ]
        pvs0 = [
            'SR:C01-MG{PS:SM1A-P2}I:Sp1-SP', 'SR:C02-MG{PS:SM1B-P2}I:Sp1-SP',
            'SR:C02-MG{PS:SM2B-P2}I:Sp1-SP', 'SR:C07-MG{PS:SM1A-P3}I:Sp1-SP',
            'SR:C08-MG{PS:SM1B-P3}I:Sp1-SP', 'SR:C08-MG{PS:SM2B-P3}I:Sp1-SP',
            'SR:C13-MG{PS:SM1A-P4}I:Sp1-SP', 'SR:C14-MG{PS:SM1B-P4}I:Sp1-SP',
            'SR:C14-MG{PS:SM2B-P4}I:Sp1-SP', 'SR:C19-MG{PS:SM1A-P5}I:Sp1-SP',
            'SR:C20-MG{PS:SM1B-P5}I:Sp1-SP', 'SR:C20-MG{PS:SM2B-P5}I:Sp1-SP',
            'SR:C25-MG{PS:SM1A-P1}I:Sp1-SP', 'SR:C26-MG{PS:SM1B-P1}I:Sp1-SP',
            'SR:C26-MG{PS:SM2B-P1}I:Sp1-SP'
        ]

        with self.assertRaises(KeyError) as context:
            updateconfig(self.conn,
                         self.collection,
                         name,
                         pvlist={"name": pvs0})
        self.assertEqual(context.exception.message,
                         'Cannot find key ("names") for pv names.')

        self.assertTrue(
            updateconfig(self.conn,
                         self.collection,
                         name,
                         pvlist={"names": pvs}))
        res3 = retrieveconfig(self.conn, self.collection, name, withpvs=True)
        self.assertEqual(res3[0]["status"], "active")
        self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"])
        self.assertEqual(res3[0]["created_on"], res0[0]["created_on"])
        self.assertEqual(res3[0]["pvlist"]["names"], pvs)
        with self.assertRaises(RuntimeError) as context:
            updateconfig(self.conn,
                         self.collection,
                         name,
                         pvlist={"names": pvs0})
        self.assertEqual(
            context.exception.message,
            "PV collection list exists already, and should not be changed.")
    def testUpdateconfig(self):
        """"""
        name = "SR_All_20140421"
        params = {"desc": "SR daily SCR setpoint without IS kick and septum: SR and RF",
                  "system": "SR",
                  "status": "active",
                  "version": 20140421,
                  }
        with self.assertRaises(RuntimeError) as context:
            updateconfig(self.conn, self.collection, None)
        self.assertEqual(context.exception.message, "Cannot identify configuration to update.")
        time.sleep(1)
        with self.assertRaises(RuntimeError) as context:
            updateconfig(self.conn, self.collection, name)
        self.assertEqual(context.exception.message, "Wrong Mongo document for %s" % name)

        newid = saveconfig(self.conn, self.collection, name, **params)
        res0 = retrieveconfig(self.conn, self.collection, name)
        self.assertTrue(updateconfig(self.conn, self.collection, name, status="inactive"))
        res1 = retrieveconfig(self.conn, self.collection, name)
        self.assertEqual(newid, res0[0]["_id"])
        self.assertEqual(newid, res1[0]["_id"])
        self.assertEqual(res0[0]["status"], "active")
        self.assertEqual(res1[0]["status"], "inactive")
        self.assertEqual(res1[0]["created_on"], res0[0]["created_on"])
        time.sleep(1)  # delay required for below updated_on inequality test
        self.assertTrue(updateconfig(self.conn, self.collection, name, status="active"))
        res2 = retrieveconfig(self.conn, self.collection, name)
        self.assertEqual(res2[0]["status"], "active")
        self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"])
        self.assertEqual(res1[0]["created_on"], res2[0]["created_on"])
        self.assertEqual(res1[0]["created_on"], res0[0]["created_on"])
        pvs = ["RF{Osc:1}Freq:I",  "SR-RF{CFC:D}E:Fb-SP",  "SR-RF{CFC:D}Phs:Fb-SP",  "SR-RF{CFC:D}Tuner:PhaOff-SP",
               "SR:C01-MG{PS:BT1A}I:Sp1-SP",  "SR:C01-MG{PS:BT1A}I:Sp2-SP",  "SR:C01-MG{PS:CH1B}I:Sp1-SP",  "SR:C01-MG{PS:CH1B}I:Sp2-SP",
               "SR:C01-MG{PS:CH2B}I:Sp1-SP",  "SR:C01-MG{PS:CH2B}I:Sp2-SP",  "SR:C01-MG{PS:CL1A}I:Sp1-SP",  "SR:C01-MG{PS:CL1A}I:Sp2-SP",
               "SR:C01-MG{PS:CL2A}I:Sp1-SP",  "SR:C01-MG{PS:CL2A}I:Sp2-SP",  "SR:C01-MG{PS:CM1A}I:Sp1-SP",  "SR:C01-MG{PS:CM1A}I:Sp2-SP",
               "SR:C01-MG{PS:CM1B}I:Sp1-SP",  "SR:C01-MG{PS:CM1B}I:Sp2-SP",  "SR:C01-MG{PS:QH1B}I:Sp1-SP",  "SR:C01-MG{PS:QH2B}I:Sp1-SP",
               "SR:C01-MG{PS:QH3B}I:Sp1-SP",  "SR:C01-MG{PS:QL1A}I:Sp1-SP",  "SR:C01-MG{PS:QL2A}I:Sp1-SP",  "SR:C01-MG{PS:QL3A}I:Sp1-SP",
               "SR:C01-MG{PS:QM1A}I:Sp1-SP",  "SR:C01-MG{PS:QM1B}I:Sp1-SP",  "SR:C01-MG{PS:QM2A}I:Sp1-SP",  "SR:C01-MG{PS:QM2B}I:Sp1-SP",
               "SR:C01-MG{PS:SH4-P2}I:Sp1-SP",  "SR:C01-MG{PS:SM1A-P2}I:Sp1-SP",  "SR:C01-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C02-MG{PS:BT1A}I:Sp1-SP",
               "SR:C02-MG{PS:BT1A}I:Sp2-SP",  "SR:C02-MG{PS:CH1A}I:Sp1-SP",  "SR:C02-MG{PS:CH1A}I:Sp2-SP",  "SR:C02-MG{PS:CH2A}I:Sp1-SP",
               "SR:C02-MG{PS:CH2A}I:Sp2-SP",  "SR:C02-MG{PS:CL1B}I:Sp1-SP",  "SR:C02-MG{PS:CL1B}I:Sp2-SP",  "SR:C02-MG{PS:CL2B}I:Sp1-SP",
               "SR:C02-MG{PS:CL2B}I:Sp2-SP",  "SR:C02-MG{PS:CM1A}I:Sp1-SP",  "SR:C02-MG{PS:CM1A}I:Sp2-SP",  "SR:C02-MG{PS:CM1B}I:Sp1-SP",
               "SR:C02-MG{PS:CM1B}I:Sp2-SP",  "SR:C02-MG{PS:QH1A}I:Sp1-SP",  "SR:C02-MG{PS:QH2A}I:Sp1-SP",  "SR:C02-MG{PS:QH3A}I:Sp1-SP",
               "SR:C02-MG{PS:QL1B}I:Sp1-SP",  "SR:C02-MG{PS:QL2B}I:Sp1-SP",  "SR:C02-MG{PS:QL3B}I:Sp1-SP",  "SR:C02-MG{PS:QM1A}I:Sp1-SP",
                "SR:C02-MG{PS:QM1B}I:Sp1-SP",  "SR:C02-MG{PS:QM2A}I:Sp1-SP",  "SR:C02-MG{PS:QM2B}I:Sp1-SP",  "SR:C02-MG{PS:SM1B-P2}I:Sp1-SP",
                "SR:C02-MG{PS:SM2B-P2}I:Sp1-SP",  "SR:C02-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C03-MG{PS:BT1A}I:Sp1-SP",  "SR:C03-MG{PS:BT1A}I:Sp2-SP",
                "SR:C03-MG{PS:CH1B}I:Sp1-SP",  "SR:C03-MG{PS:CH1B}I:Sp2-SP",  "SR:C03-MG{PS:CH2B}I:Sp1-SP",  "SR:C03-MG{PS:CH2B}I:Sp2-SP",
                "SR:C03-MG{PS:CL1A}I:Sp1-SP",  "SR:C03-MG{PS:CL1A}I:Sp2-SP",  "SR:C03-MG{PS:CL2A}I:Sp1-SP",  "SR:C03-MG{PS:CL2A}I:Sp2-SP",
                "SR:C03-MG{PS:CM1A}I:Sp1-SP",  "SR:C03-MG{PS:CM1A}I:Sp2-SP",  "SR:C03-MG{PS:CM1B}I:Sp1-SP",  "SR:C03-MG{PS:CM1B}I:Sp2-SP",
                "SR:C03-MG{PS:D-SP}I:Sp1-SP",  "SR:C03-MG{PS:QH1B}I:Sp1-SP",  "SR:C03-MG{PS:QH2B}I:Sp1-SP",  "SR:C03-MG{PS:QH3B}I:Sp1-SP",
                "SR:C03-MG{PS:QL1A}I:Sp1-SP",  "SR:C03-MG{PS:QL2A}I:Sp1-SP",  "SR:C03-MG{PS:QL3A}I:Sp1-SP",  "SR:C03-MG{PS:QM1A}I:Sp1-SP",
                "SR:C03-MG{PS:QM1B}I:Sp1-SP",  "SR:C03-MG{PS:QM2A}I:Sp1-SP",  "SR:C03-MG{PS:QM2B}I:Sp1-SP",  "SR:C03-MG{PS:SL2-P2}I:Sp1-SP",
                "SR:C03-MG{PS:SL3-P2}I:Sp1-SP",  "SR:C03-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C04-MG{PS:BT1A}I:Sp1-SP",  "SR:C04-MG{PS:BT1A}I:Sp2-SP",
                "SR:C04-MG{PS:CH1A}I:Sp1-SP",  "SR:C04-MG{PS:CH1A}I:Sp2-SP",  "SR:C04-MG{PS:CH2A}I:Sp1-SP",  "SR:C04-MG{PS:CH2A}I:Sp2-SP",
                "SR:C04-MG{PS:CL1B}I:Sp1-SP",  "SR:C04-MG{PS:CL1B}I:Sp2-SP",  "SR:C04-MG{PS:CL2B}I:Sp1-SP",  "SR:C04-MG{PS:CL2B}I:Sp2-SP",
                "SR:C04-MG{PS:CM1A}I:Sp1-SP",  "SR:C04-MG{PS:CM1A}I:Sp2-SP",  "SR:C04-MG{PS:CM1B}I:Sp1-SP",  "SR:C04-MG{PS:CM1B}I:Sp2-SP",
                "SR:C04-MG{PS:QH1A}I:Sp1-SP",  "SR:C04-MG{PS:QH2A}I:Sp1-SP",  "SR:C04-MG{PS:QH3A}I:Sp1-SP",  "SR:C04-MG{PS:QL1B}I:Sp1-SP",
                "SR:C04-MG{PS:QL2B}I:Sp1-SP",  "SR:C04-MG{PS:QL3B}I:Sp1-SP",  "SR:C04-MG{PS:QM1A}I:Sp1-SP",  "SR:C04-MG{PS:QM1B}I:Sp1-SP",
                "SR:C04-MG{PS:QM2A}I:Sp1-SP",  "SR:C04-MG{PS:QM2B}I:Sp1-SP",  "SR:C04-MG{PS:SL1-P2}I:Sp1-SP",  "SR:C04-MG{PS:SQKH1A}I:Sp1-SP",
                "SR:C05-MG{PS:BT1A}I:Sp1-SP",  "SR:C05-MG{PS:BT1A}I:Sp2-SP",  "SR:C05-MG{PS:CH1B}I:Sp1-SP",  "SR:C05-MG{PS:CH1B}I:Sp2-SP",
                "SR:C05-MG{PS:CH2B}I:Sp1-SP",  "SR:C05-MG{PS:CH2B}I:Sp2-SP",  "SR:C05-MG{PS:CL1A}I:Sp1-SP",  "SR:C05-MG{PS:CL1A}I:Sp2-SP",
                "SR:C05-MG{PS:CL2A}I:Sp1-SP",  "SR:C05-MG{PS:CL2A}I:Sp2-SP",  "SR:C05-MG{PS:CM1A}I:Sp1-SP",  "SR:C05-MG{PS:CM1A}I:Sp2-SP",
                "SR:C05-MG{PS:CM1B}I:Sp1-SP",  "SR:C05-MG{PS:CM1B}I:Sp2-SP",  "SR:C05-MG{PS:QH1B}I:Sp1-SP",  "SR:C05-MG{PS:QH2B}I:Sp1-SP",
                "SR:C05-MG{PS:QH3B}I:Sp1-SP",  "SR:C05-MG{PS:QL1A}I:Sp1-SP",  "SR:C05-MG{PS:QL2A}I:Sp1-SP",  "SR:C05-MG{PS:QL3A}I:Sp1-SP",
                "SR:C05-MG{PS:QM1A}I:Sp1-SP",  "SR:C05-MG{PS:QM1B}I:Sp1-SP",  "SR:C05-MG{PS:QM2A}I:Sp1-SP",  "SR:C05-MG{PS:QM2B}I:Sp1-SP",
                "SR:C05-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C06-MG{PS:BT1A}I:Sp1-SP",  "SR:C06-MG{PS:BT1A}I:Sp2-SP",  "SR:C06-MG{PS:CH1A}I:Sp1-SP",
                "SR:C06-MG{PS:CH1A}I:Sp2-SP",  "SR:C06-MG{PS:CH2A}I:Sp1-SP",  "SR:C06-MG{PS:CH2A}I:Sp2-SP",  "SR:C06-MG{PS:CL1B}I:Sp1-SP",
                "SR:C06-MG{PS:CL1B}I:Sp2-SP",  "SR:C06-MG{PS:CL2B}I:Sp1-SP",  "SR:C06-MG{PS:CL2B}I:Sp2-SP",  "SR:C06-MG{PS:CM1A}I:Sp1-SP",
                "SR:C06-MG{PS:CM1A}I:Sp2-SP",  "SR:C06-MG{PS:CM1B}I:Sp1-SP",  "SR:C06-MG{PS:CM1B}I:Sp2-SP",  "SR:C06-MG{PS:QH1A}I:Sp1-SP",
                "SR:C06-MG{PS:QH2A}I:Sp1-SP",  "SR:C06-MG{PS:QH3A}I:Sp1-SP",  "SR:C06-MG{PS:QL1B}I:Sp1-SP",  "SR:C06-MG{PS:QL2B}I:Sp1-SP",
                "SR:C06-MG{PS:QL3B}I:Sp1-SP",  "SR:C06-MG{PS:QM1A}I:Sp1-SP",  "SR:C06-MG{PS:QM1B}I:Sp1-SP",  "SR:C06-MG{PS:QM2A}I:Sp1-SP",
                "SR:C06-MG{PS:QM2B}I:Sp1-SP",  "SR:C06-MG{PS:SH1-P3}I:Sp1-SP",  "SR:C06-MG{PS:SH3-P3}I:Sp1-SP",  "SR:C06-MG{PS:SQKH1A}I:Sp1-SP",
                "SR:C07-MG{PS:BT1A}I:Sp1-SP",  "SR:C07-MG{PS:BT1A}I:Sp2-SP",  "SR:C07-MG{PS:CH1B}I:Sp1-SP",  "SR:C07-MG{PS:CH1B}I:Sp2-SP",
                "SR:C07-MG{PS:CH2B}I:Sp1-SP",  "SR:C07-MG{PS:CH2B}I:Sp2-SP",  "SR:C07-MG{PS:CL1A}I:Sp1-SP",  "SR:C07-MG{PS:CL1A}I:Sp2-SP",
                "SR:C07-MG{PS:CL2A}I:Sp1-SP",  "SR:C07-MG{PS:CL2A}I:Sp2-SP",  "SR:C07-MG{PS:CM1A}I:Sp1-SP",  "SR:C07-MG{PS:CM1A}I:Sp2-SP",
                "SR:C07-MG{PS:CM1B}I:Sp1-SP",  "SR:C07-MG{PS:CM1B}I:Sp2-SP",  "SR:C07-MG{PS:QH1B}I:Sp1-SP",  "SR:C07-MG{PS:QH2B}I:Sp1-SP",
                "SR:C07-MG{PS:QH3B}I:Sp1-SP",  "SR:C07-MG{PS:QL1A}I:Sp1-SP",  "SR:C07-MG{PS:QL2A}I:Sp1-SP",  "SR:C07-MG{PS:QL3A}I:Sp1-SP",
                "SR:C07-MG{PS:QM1A}I:Sp1-SP",  "SR:C07-MG{PS:QM1B}I:Sp1-SP",  "SR:C07-MG{PS:QM2A}I:Sp1-SP",  "SR:C07-MG{PS:QM2B}I:Sp1-SP",
                "SR:C07-MG{PS:SH4-P3}I:Sp1-SP",  "SR:C07-MG{PS:SM1A-P3}I:Sp1-SP",  "SR:C07-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C08-MG{PS:BT1A}I:Sp1-SP",
                "SR:C08-MG{PS:BT1A}I:Sp2-SP",  "SR:C08-MG{PS:CH1A}I:Sp1-SP",  "SR:C08-MG{PS:CH1A}I:Sp2-SP",  "SR:C08-MG{PS:CH2A}I:Sp1-SP",
                "SR:C08-MG{PS:CH2A}I:Sp2-SP",  "SR:C08-MG{PS:CL1B}I:Sp1-SP",  "SR:C08-MG{PS:CL1B}I:Sp2-SP",  "SR:C08-MG{PS:CL2B}I:Sp1-SP",
                "SR:C08-MG{PS:CL2B}I:Sp2-SP",  "SR:C08-MG{PS:CM1A}I:Sp1-SP",  "SR:C08-MG{PS:CM1A}I:Sp2-SP",  "SR:C08-MG{PS:CM1B}I:Sp1-SP",
                "SR:C08-MG{PS:CM1B}I:Sp2-SP",  "SR:C08-MG{PS:QH1A}I:Sp1-SP",  "SR:C08-MG{PS:QH2A}I:Sp1-SP",  "SR:C08-MG{PS:QH3A}I:Sp1-SP",
                "SR:C08-MG{PS:QL1B}I:Sp1-SP",  "SR:C08-MG{PS:QL2B}I:Sp1-SP",  "SR:C08-MG{PS:QL3B}I:Sp1-SP",  "SR:C08-MG{PS:QM1A}I:Sp1-SP",
                "SR:C08-MG{PS:QM1B}I:Sp1-SP",  "SR:C08-MG{PS:QM2A}I:Sp1-SP",  "SR:C08-MG{PS:QM2B}I:Sp1-SP",  "SR:C08-MG{PS:SH1-DW08}I:Sp1-SP",
                "SR:C08-MG{PS:SH3-DW08}I:Sp1-SP",  "SR:C08-MG{PS:SH4-DW08}I:Sp1-SP",  "SR:C08-MG{PS:SM1B-P3}I:Sp1-SP",  "SR:C08-MG{PS:SM2B-P3}I:Sp1-SP",
                "SR:C08-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C09-MG{PS:BT1A}I:Sp1-SP",  "SR:C09-MG{PS:BT1A}I:Sp2-SP",  "SR:C09-MG{PS:CH1B}I:Sp1-SP",
                "SR:C09-MG{PS:CH1B}I:Sp2-SP",  "SR:C09-MG{PS:CH2B}I:Sp1-SP",  "SR:C09-MG{PS:CH2B}I:Sp2-SP",  "SR:C09-MG{PS:CL1A}I:Sp1-SP",
                "SR:C09-MG{PS:CL1A}I:Sp2-SP",  "SR:C09-MG{PS:CL2A}I:Sp1-SP",  "SR:C09-MG{PS:CL2A}I:Sp2-SP",  "SR:C09-MG{PS:CM1A}I:Sp1-SP",
                "SR:C09-MG{PS:CM1A}I:Sp2-SP",  "SR:C09-MG{PS:CM1B}I:Sp1-SP",  "SR:C09-MG{PS:CM1B}I:Sp2-SP",  "SR:C09-MG{PS:QH1B}I:Sp1-SP",
                "SR:C09-MG{PS:QH2B}I:Sp1-SP",  "SR:C09-MG{PS:QH3B}I:Sp1-SP",  "SR:C09-MG{PS:QL1A}I:Sp1-SP",  "SR:C09-MG{PS:QL2A}I:Sp1-SP",
                "SR:C09-MG{PS:QL3A}I:Sp1-SP",  "SR:C09-MG{PS:QM1A}I:Sp1-SP",  "SR:C09-MG{PS:QM1B}I:Sp1-SP",  "SR:C09-MG{PS:QM2A}I:Sp1-SP",
                "SR:C09-MG{PS:QM2B}I:Sp1-SP",  "SR:C09-MG{PS:SL2-P3}I:Sp1-SP",  "SR:C09-MG{PS:SL3-P3}I:Sp1-SP",  "SR:C09-MG{PS:SQKM1A}I:Sp1-SP",
                "SR:C10-MG{PS:BT1A}I:Sp1-SP",  "SR:C10-MG{PS:BT1A}I:Sp2-SP",  "SR:C10-MG{PS:CH1A}I:Sp1-SP",  "SR:C10-MG{PS:CH1A}I:Sp2-SP",
                "SR:C10-MG{PS:CH2A}I:Sp1-SP",  "SR:C10-MG{PS:CH2A}I:Sp2-SP",  "SR:C10-MG{PS:CL1B}I:Sp1-SP",  "SR:C10-MG{PS:CL1B}I:Sp2-SP",
                "SR:C10-MG{PS:CL2B}I:Sp1-SP",  "SR:C10-MG{PS:CL2B}I:Sp2-SP",  "SR:C10-MG{PS:CM1A}I:Sp1-SP",  "SR:C10-MG{PS:CM1A}I:Sp2-SP",
                "SR:C10-MG{PS:CM1B}I:Sp1-SP",  "SR:C10-MG{PS:CM1B}I:Sp2-SP",  "SR:C10-MG{PS:QH1A}I:Sp1-SP",  "SR:C10-MG{PS:QH2A}I:Sp1-SP",
                "SR:C10-MG{PS:QH3A}I:Sp1-SP",  "SR:C10-MG{PS:QL1B}I:Sp1-SP",  "SR:C10-MG{PS:QL2B}I:Sp1-SP",  "SR:C10-MG{PS:QL3B}I:Sp1-SP",
                "SR:C10-MG{PS:QM1A}I:Sp1-SP",  "SR:C10-MG{PS:QM1B}I:Sp1-SP",  "SR:C10-MG{PS:QM2A}I:Sp1-SP",  "SR:C10-MG{PS:QM2B}I:Sp1-SP",
                "SR:C10-MG{PS:SL1-P3}I:Sp1-SP",  "SR:C10-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C11-MG{PS:BT1A}I:Sp1-SP",  "SR:C11-MG{PS:BT1A}I:Sp2-SP",
                "SR:C11-MG{PS:CH1B}I:Sp1-SP",  "SR:C11-MG{PS:CH1B}I:Sp2-SP",  "SR:C11-MG{PS:CH2B}I:Sp1-SP",  "SR:C11-MG{PS:CH2B}I:Sp2-SP",
                "SR:C11-MG{PS:CL1A}I:Sp1-SP",  "SR:C11-MG{PS:CL1A}I:Sp2-SP",  "SR:C11-MG{PS:CL2A}I:Sp1-SP",  "SR:C11-MG{PS:CL2A}I:Sp2-SP",
                "SR:C11-MG{PS:CM1A}I:Sp1-SP",  "SR:C11-MG{PS:CM1A}I:Sp2-SP",  "SR:C11-MG{PS:CM1B}I:Sp1-SP",  "SR:C11-MG{PS:CM1B}I:Sp2-SP",
                "SR:C11-MG{PS:QH1B}I:Sp1-SP",  "SR:C11-MG{PS:QH2B}I:Sp1-SP",  "SR:C11-MG{PS:QH3B}I:Sp1-SP",  "SR:C11-MG{PS:QL1A}I:Sp1-SP",
                "SR:C11-MG{PS:QL2A}I:Sp1-SP",  "SR:C11-MG{PS:QL3A}I:Sp1-SP",  "SR:C11-MG{PS:QM1A}I:Sp1-SP",  "SR:C11-MG{PS:QM1B}I:Sp1-SP",
                "SR:C11-MG{PS:QM2A}I:Sp1-SP",  "SR:C11-MG{PS:QM2B}I:Sp1-SP",  "SR:C11-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C12-MG{PS:BT1A}I:Sp1-SP",
                "SR:C12-MG{PS:BT1A}I:Sp2-SP",  "SR:C12-MG{PS:CH1A}I:Sp1-SP",  "SR:C12-MG{PS:CH1A}I:Sp2-SP",  "SR:C12-MG{PS:CH2A}I:Sp1-SP",
                "SR:C12-MG{PS:CH2A}I:Sp2-SP",  "SR:C12-MG{PS:CL1B}I:Sp1-SP",  "SR:C12-MG{PS:CL1B}I:Sp2-SP",  "SR:C12-MG{PS:CL2B}I:Sp1-SP",
                "SR:C12-MG{PS:CL2B}I:Sp2-SP",  "SR:C12-MG{PS:CM1A}I:Sp1-SP",  "SR:C12-MG{PS:CM1A}I:Sp2-SP",  "SR:C12-MG{PS:CM1B}I:Sp1-SP",
                "SR:C12-MG{PS:CM1B}I:Sp2-SP",  "SR:C12-MG{PS:QH1A}I:Sp1-SP",  "SR:C12-MG{PS:QH2A}I:Sp1-SP",  "SR:C12-MG{PS:QH3A}I:Sp1-SP",
                "SR:C12-MG{PS:QL1B}I:Sp1-SP",  "SR:C12-MG{PS:QL2B}I:Sp1-SP",  "SR:C12-MG{PS:QL3B}I:Sp1-SP",  "SR:C12-MG{PS:QM1A}I:Sp1-SP",
                "SR:C12-MG{PS:QM1B}I:Sp1-SP",  "SR:C12-MG{PS:QM2A}I:Sp1-SP",  "SR:C12-MG{PS:QM2B}I:Sp1-SP",  "SR:C12-MG{PS:SH1-P4}I:Sp1-SP",
                "SR:C12-MG{PS:SH3-P4}I:Sp1-SP",  "SR:C12-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C13-MG{PS:BT1A}I:Sp1-SP",  "SR:C13-MG{PS:BT1A}I:Sp2-SP",
                "SR:C13-MG{PS:CH1B}I:Sp1-SP",  "SR:C13-MG{PS:CH1B}I:Sp2-SP",  "SR:C13-MG{PS:CH2B}I:Sp1-SP",  "SR:C13-MG{PS:CH2B}I:Sp2-SP",
                "SR:C13-MG{PS:CL1A}I:Sp1-SP",  "SR:C13-MG{PS:CL1A}I:Sp2-SP",  "SR:C13-MG{PS:CL2A}I:Sp1-SP",  "SR:C13-MG{PS:CL2A}I:Sp2-SP",
                "SR:C13-MG{PS:CM1A}I:Sp1-SP",  "SR:C13-MG{PS:CM1A}I:Sp2-SP",  "SR:C13-MG{PS:CM1B}I:Sp1-SP",  "SR:C13-MG{PS:CM1B}I:Sp2-SP",
                "SR:C13-MG{PS:QH1B}I:Sp1-SP",  "SR:C13-MG{PS:QH2B}I:Sp1-SP",  "SR:C13-MG{PS:QH3B}I:Sp1-SP",  "SR:C13-MG{PS:QL1A}I:Sp1-SP",
                "SR:C13-MG{PS:QL2A}I:Sp1-SP",  "SR:C13-MG{PS:QL3A}I:Sp1-SP",  "SR:C13-MG{PS:QM1A}I:Sp1-SP",  "SR:C13-MG{PS:QM1B}I:Sp1-SP",
                "SR:C13-MG{PS:QM2A}I:Sp1-SP",  "SR:C13-MG{PS:QM2B}I:Sp1-SP",  "SR:C13-MG{PS:SH4-P4}I:Sp1-SP",  "SR:C13-MG{PS:SM1A-P4}I:Sp1-SP",
                "SR:C13-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C14-MG{PS:BT1A}I:Sp1-SP",  "SR:C14-MG{PS:BT1A}I:Sp2-SP",  "SR:C14-MG{PS:CH1A}I:Sp1-SP",
                "SR:C14-MG{PS:CH1A}I:Sp2-SP",  "SR:C14-MG{PS:CH2A}I:Sp1-SP",  "SR:C14-MG{PS:CH2A}I:Sp2-SP",  "SR:C14-MG{PS:CL1B}I:Sp1-SP",
                "SR:C14-MG{PS:CL1B}I:Sp2-SP",  "SR:C14-MG{PS:CL2B}I:Sp1-SP",  "SR:C14-MG{PS:CL2B}I:Sp2-SP",  "SR:C14-MG{PS:CM1A}I:Sp1-SP",
                "SR:C14-MG{PS:CM1A}I:Sp2-SP",  "SR:C14-MG{PS:CM1B}I:Sp1-SP",  "SR:C14-MG{PS:CM1B}I:Sp2-SP",  "SR:C14-MG{PS:QH1A}I:Sp1-SP",
                "SR:C14-MG{PS:QH2A}I:Sp1-SP",  "SR:C14-MG{PS:QH3A}I:Sp1-SP",  "SR:C14-MG{PS:QL1B}I:Sp1-SP",  "SR:C14-MG{PS:QL2B}I:Sp1-SP",
                "SR:C14-MG{PS:QL3B}I:Sp1-SP",  "SR:C14-MG{PS:QM1A}I:Sp1-SP",  "SR:C14-MG{PS:QM1B}I:Sp1-SP",  "SR:C14-MG{PS:QM2A}I:Sp1-SP",
                "SR:C14-MG{PS:QM2B}I:Sp1-SP",  "SR:C14-MG{PS:SM1B-P4}I:Sp1-SP",  "SR:C14-MG{PS:SM2B-P4}I:Sp1-SP",  "SR:C14-MG{PS:SQKH1A}I:Sp1-SP",
                "SR:C15-MG{PS:BT1A}I:Sp1-SP",  "SR:C15-MG{PS:BT1A}I:Sp2-SP",  "SR:C15-MG{PS:CH1B}I:Sp1-SP",  "SR:C15-MG{PS:CH1B}I:Sp2-SP",
                "SR:C15-MG{PS:CH2B}I:Sp1-SP",  "SR:C15-MG{PS:CH2B}I:Sp2-SP",  "SR:C15-MG{PS:CL1A}I:Sp1-SP",  "SR:C15-MG{PS:CL1A}I:Sp2-SP",
                "SR:C15-MG{PS:CL2A}I:Sp1-SP",  "SR:C15-MG{PS:CL2A}I:Sp2-SP",  "SR:C15-MG{PS:CM1A}I:Sp1-SP",  "SR:C15-MG{PS:CM1A}I:Sp2-SP",
                "SR:C15-MG{PS:CM1B}I:Sp1-SP",  "SR:C15-MG{PS:CM1B}I:Sp2-SP",  "SR:C15-MG{PS:QH1B}I:Sp1-SP",  "SR:C15-MG{PS:QH2B}I:Sp1-SP",
                "SR:C15-MG{PS:QH3B}I:Sp1-SP",  "SR:C15-MG{PS:QL1A}I:Sp1-SP",  "SR:C15-MG{PS:QL2A}I:Sp1-SP",  "SR:C15-MG{PS:QL3A}I:Sp1-SP",
                "SR:C15-MG{PS:QM1A}I:Sp1-SP",  "SR:C15-MG{PS:QM1B}I:Sp1-SP",  "SR:C15-MG{PS:QM2A}I:Sp1-SP",  "SR:C15-MG{PS:QM2B}I:Sp1-SP",
                "SR:C15-MG{PS:SL2-P4}I:Sp1-SP",  "SR:C15-MG{PS:SL3-P4}I:Sp1-SP",  "SR:C15-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C16-MG{PS:BT1A}I:Sp1-SP",
                "SR:C16-MG{PS:BT1A}I:Sp2-SP",  "SR:C16-MG{PS:CH1A}I:Sp1-SP",  "SR:C16-MG{PS:CH1A}I:Sp2-SP",  "SR:C16-MG{PS:CH2A}I:Sp1-SP",
                "SR:C16-MG{PS:CH2A}I:Sp2-SP",  "SR:C16-MG{PS:CL1B}I:Sp1-SP",  "SR:C16-MG{PS:CL1B}I:Sp2-SP",  "SR:C16-MG{PS:CL2B}I:Sp1-SP",
                "SR:C16-MG{PS:CL2B}I:Sp2-SP",  "SR:C16-MG{PS:CM1A}I:Sp1-SP",  "SR:C16-MG{PS:CM1A}I:Sp2-SP",  "SR:C16-MG{PS:CM1B}I:Sp1-SP",
                "SR:C16-MG{PS:CM1B}I:Sp2-SP",  "SR:C16-MG{PS:QH1A}I:Sp1-SP",  "SR:C16-MG{PS:QH2A}I:Sp1-SP",  "SR:C16-MG{PS:QH3A}I:Sp1-SP",
                "SR:C16-MG{PS:QL1B}I:Sp1-SP",  "SR:C16-MG{PS:QL2B}I:Sp1-SP",  "SR:C16-MG{PS:QL3B}I:Sp1-SP",  "SR:C16-MG{PS:QM1A}I:Sp1-SP",
                "SR:C16-MG{PS:QM1B}I:Sp1-SP",  "SR:C16-MG{PS:QM2A}I:Sp1-SP",  "SR:C16-MG{PS:QM2B}I:Sp1-SP",  "SR:C16-MG{PS:SL1-P4}I:Sp1-SP",
                "SR:C16-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C17-MG{PS:BT1A}I:Sp1-SP",  "SR:C17-MG{PS:BT1A}I:Sp2-SP",  "SR:C17-MG{PS:CH1B}I:Sp1-SP",
                "SR:C17-MG{PS:CH1B}I:Sp2-SP",  "SR:C17-MG{PS:CH2B}I:Sp1-SP",  "SR:C17-MG{PS:CH2B}I:Sp2-SP",  "SR:C17-MG{PS:CL1A}I:Sp1-SP",
                "SR:C17-MG{PS:CL1A}I:Sp2-SP",  "SR:C17-MG{PS:CL2A}I:Sp1-SP",  "SR:C17-MG{PS:CL2A}I:Sp2-SP",  "SR:C17-MG{PS:CM1A}I:Sp1-SP",
                "SR:C17-MG{PS:CM1A}I:Sp2-SP",  "SR:C17-MG{PS:CM1B}I:Sp1-SP",  "SR:C17-MG{PS:CM1B}I:Sp2-SP",  "SR:C17-MG{PS:QH1B}I:Sp1-SP",
                "SR:C17-MG{PS:QH2B}I:Sp1-SP",  "SR:C17-MG{PS:QH3B}I:Sp1-SP",  "SR:C17-MG{PS:QL1A}I:Sp1-SP",  "SR:C17-MG{PS:QL2A}I:Sp1-SP",
                "SR:C17-MG{PS:QL3A}I:Sp1-SP",  "SR:C17-MG{PS:QM1A}I:Sp1-SP",  "SR:C17-MG{PS:QM1B}I:Sp1-SP",  "SR:C17-MG{PS:QM2A}I:Sp1-SP",
                "SR:C17-MG{PS:QM2B}I:Sp1-SP",  "SR:C17-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C18-MG{PS:BT1A}I:Sp1-SP",  "SR:C18-MG{PS:BT1A}I:Sp2-SP",
                "SR:C18-MG{PS:CH1A}I:Sp1-SP",  "SR:C18-MG{PS:CH1A}I:Sp2-SP",  "SR:C18-MG{PS:CH2A}I:Sp1-SP",  "SR:C18-MG{PS:CH2A}I:Sp2-SP",
                "SR:C18-MG{PS:CL1B}I:Sp1-SP",  "SR:C18-MG{PS:CL1B}I:Sp2-SP",  "SR:C18-MG{PS:CL2B}I:Sp1-SP",  "SR:C18-MG{PS:CL2B}I:Sp2-SP",
                "SR:C18-MG{PS:CM1A}I:Sp1-SP",  "SR:C18-MG{PS:CM1A}I:Sp2-SP",  "SR:C18-MG{PS:CM1B}I:Sp1-SP",  "SR:C18-MG{PS:CM1B}I:Sp2-SP",
                "SR:C18-MG{PS:QH1A}I:Sp1-SP",  "SR:C18-MG{PS:QH2A}I:Sp1-SP",  "SR:C18-MG{PS:QH3A}I:Sp1-SP",  "SR:C18-MG{PS:QL1B}I:Sp1-SP",
                "SR:C18-MG{PS:QL2B}I:Sp1-SP",  "SR:C18-MG{PS:QL3B}I:Sp1-SP",  "SR:C18-MG{PS:QM1A}I:Sp1-SP",  "SR:C18-MG{PS:QM1B}I:Sp1-SP",
                "SR:C18-MG{PS:QM2A}I:Sp1-SP",  "SR:C18-MG{PS:QM2B}I:Sp1-SP",  "SR:C18-MG{PS:SH1-DW18}I:Sp1-SP",  "SR:C18-MG{PS:SH1-P5}I:Sp1-SP",
                "SR:C18-MG{PS:SH3-DW18}I:Sp1-SP",  "SR:C18-MG{PS:SH3-P5}I:Sp1-SP",  "SR:C18-MG{PS:SH4-DW18}I:Sp1-SP",  "SR:C18-MG{PS:SQKH1A}I:Sp1-SP",
                "SR:C19-MG{PS:BT1A}I:Sp1-SP",  "SR:C19-MG{PS:BT1A}I:Sp2-SP",  "SR:C19-MG{PS:CH1B}I:Sp1-SP",  "SR:C19-MG{PS:CH1B}I:Sp2-SP",
                "SR:C19-MG{PS:CH2B}I:Sp1-SP",  "SR:C19-MG{PS:CH2B}I:Sp2-SP",  "SR:C19-MG{PS:CL1A}I:Sp1-SP",  "SR:C19-MG{PS:CL1A}I:Sp2-SP",
                "SR:C19-MG{PS:CL2A}I:Sp1-SP",  "SR:C19-MG{PS:CL2A}I:Sp2-SP",  "SR:C19-MG{PS:CM1A}I:Sp1-SP",  "SR:C19-MG{PS:CM1A}I:Sp2-SP",
                "SR:C19-MG{PS:CM1B}I:Sp1-SP",  "SR:C19-MG{PS:CM1B}I:Sp2-SP",  "SR:C19-MG{PS:QH1B}I:Sp1-SP",  "SR:C19-MG{PS:QH2B}I:Sp1-SP",
                "SR:C19-MG{PS:QH3B}I:Sp1-SP",  "SR:C19-MG{PS:QL1A}I:Sp1-SP",  "SR:C19-MG{PS:QL2A}I:Sp1-SP",  "SR:C19-MG{PS:QL3A}I:Sp1-SP",
                "SR:C19-MG{PS:QM1A}I:Sp1-SP",  "SR:C19-MG{PS:QM1B}I:Sp1-SP",  "SR:C19-MG{PS:QM2A}I:Sp1-SP",  "SR:C19-MG{PS:QM2B}I:Sp1-SP",
                "SR:C19-MG{PS:SH4-P5}I:Sp1-SP",  "SR:C19-MG{PS:SM1A-P5}I:Sp1-SP",  "SR:C19-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C20-MG{PS:BT1A}I:Sp1-SP",
                "SR:C20-MG{PS:BT1A}I:Sp2-SP",  "SR:C20-MG{PS:CH1A}I:Sp1-SP",  "SR:C20-MG{PS:CH1A}I:Sp2-SP",  "SR:C20-MG{PS:CH2A}I:Sp1-SP",
                "SR:C20-MG{PS:CH2A}I:Sp2-SP",  "SR:C20-MG{PS:CL1B}I:Sp1-SP",  "SR:C20-MG{PS:CL1B}I:Sp2-SP",  "SR:C20-MG{PS:CL2B}I:Sp1-SP",
                "SR:C20-MG{PS:CL2B}I:Sp2-SP",  "SR:C20-MG{PS:CM1A}I:Sp1-SP",  "SR:C20-MG{PS:CM1A}I:Sp2-SP",  "SR:C20-MG{PS:CM1B}I:Sp1-SP",
                "SR:C20-MG{PS:CM1B}I:Sp2-SP",  "SR:C20-MG{PS:QH1A}I:Sp1-SP",  "SR:C20-MG{PS:QH2A}I:Sp1-SP",  "SR:C20-MG{PS:QH3A}I:Sp1-SP",
                "SR:C20-MG{PS:QL1B}I:Sp1-SP",  "SR:C20-MG{PS:QL2B}I:Sp1-SP",  "SR:C20-MG{PS:QL3B}I:Sp1-SP",  "SR:C20-MG{PS:QM1A}I:Sp1-SP",
                "SR:C20-MG{PS:QM1B}I:Sp1-SP",  "SR:C20-MG{PS:QM2A}I:Sp1-SP",  "SR:C20-MG{PS:QM2B}I:Sp1-SP",  "SR:C20-MG{PS:SM1B-P5}I:Sp1-SP",
                "SR:C20-MG{PS:SM2B-P5}I:Sp1-SP",  "SR:C20-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C21-MG{PS:BT1A}I:Sp1-SP",  "SR:C21-MG{PS:BT1A}I:Sp2-SP",
                "SR:C21-MG{PS:CH1B}I:Sp1-SP",  "SR:C21-MG{PS:CH1B}I:Sp2-SP",  "SR:C21-MG{PS:CH2B}I:Sp1-SP",  "SR:C21-MG{PS:CH2B}I:Sp2-SP",
                "SR:C21-MG{PS:CL1A}I:Sp1-SP",  "SR:C21-MG{PS:CL1A}I:Sp2-SP",  "SR:C21-MG{PS:CL2A}I:Sp1-SP",  "SR:C21-MG{PS:CL2A}I:Sp2-SP",
                "SR:C21-MG{PS:CM1A}I:Sp1-SP",  "SR:C21-MG{PS:CM1A}I:Sp2-SP",  "SR:C21-MG{PS:CM1B}I:Sp1-SP",  "SR:C21-MG{PS:CM1B}I:Sp2-SP",
                "SR:C21-MG{PS:QH1B}I:Sp1-SP",  "SR:C21-MG{PS:QH2B}I:Sp1-SP",  "SR:C21-MG{PS:QH3B}I:Sp1-SP",  "SR:C21-MG{PS:QL1A}I:Sp1-SP",
                "SR:C21-MG{PS:QL2A}I:Sp1-SP",  "SR:C21-MG{PS:QL3A}I:Sp1-SP",  "SR:C21-MG{PS:QM1A}I:Sp1-SP",  "SR:C21-MG{PS:QM1B}I:Sp1-SP",
                "SR:C21-MG{PS:QM2A}I:Sp1-SP",  "SR:C21-MG{PS:QM2B}I:Sp1-SP",  "SR:C21-MG{PS:SL2-P5}I:Sp1-SP",  "SR:C21-MG{PS:SL3-P5}I:Sp1-SP",
                "SR:C21-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C22-MG{PS:BT1A}I:Sp1-SP",  "SR:C22-MG{PS:BT1A}I:Sp2-SP",  "SR:C22-MG{PS:CH1A}I:Sp1-SP",
                "SR:C22-MG{PS:CH1A}I:Sp2-SP",  "SR:C22-MG{PS:CH2A}I:Sp1-SP",  "SR:C22-MG{PS:CH2A}I:Sp2-SP",  "SR:C22-MG{PS:CL1B}I:Sp1-SP",
                "SR:C22-MG{PS:CL1B}I:Sp2-SP",  "SR:C22-MG{PS:CL2B}I:Sp1-SP",  "SR:C22-MG{PS:CL2B}I:Sp2-SP",  "SR:C22-MG{PS:CM1A}I:Sp1-SP",
                "SR:C22-MG{PS:CM1A}I:Sp2-SP",  "SR:C22-MG{PS:CM1B}I:Sp1-SP",  "SR:C22-MG{PS:CM1B}I:Sp2-SP",  "SR:C22-MG{PS:QH1A}I:Sp1-SP",
                "SR:C22-MG{PS:QH2A}I:Sp1-SP",  "SR:C22-MG{PS:QH3A}I:Sp1-SP",  "SR:C22-MG{PS:QL1B}I:Sp1-SP",  "SR:C22-MG{PS:QL2B}I:Sp1-SP",
                "SR:C22-MG{PS:QL3B}I:Sp1-SP",  "SR:C22-MG{PS:QM1A}I:Sp1-SP",  "SR:C22-MG{PS:QM1B}I:Sp1-SP",  "SR:C22-MG{PS:QM2A}I:Sp1-SP",
                "SR:C22-MG{PS:QM2B}I:Sp1-SP",  "SR:C22-MG{PS:SL1-P5}I:Sp1-SP",  "SR:C22-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C23-MG{PS:BT1A}I:Sp1-SP",
                "SR:C23-MG{PS:BT1A}I:Sp2-SP",  "SR:C23-MG{PS:CH1B}I:Sp1-SP",  "SR:C23-MG{PS:CH1B}I:Sp2-SP",  "SR:C23-MG{PS:CH2B}I:Sp1-SP",
                "SR:C23-MG{PS:CH2B}I:Sp2-SP",  "SR:C23-MG{PS:CL1A}I:Sp1-SP",  "SR:C23-MG{PS:CL1A}I:Sp2-SP",  "SR:C23-MG{PS:CL2A}I:Sp1-SP",
                "SR:C23-MG{PS:CL2A}I:Sp2-SP",  "SR:C23-MG{PS:CM1A}I:Sp1-SP",  "SR:C23-MG{PS:CM1A}I:Sp2-SP",  "SR:C23-MG{PS:CM1B}I:Sp1-SP",
                "SR:C23-MG{PS:CM1B}I:Sp2-SP",  "SR:C23-MG{PS:QH1B}I:Sp1-SP",  "SR:C23-MG{PS:QH2B}I:Sp1-SP",  "SR:C23-MG{PS:QH3B}I:Sp1-SP",
                "SR:C23-MG{PS:QL1A}I:Sp1-SP",  "SR:C23-MG{PS:QL2A}I:Sp1-SP",  "SR:C23-MG{PS:QL3A}I:Sp1-SP",  "SR:C23-MG{PS:QM1A}I:Sp1-SP",
                "SR:C23-MG{PS:QM1B}I:Sp1-SP",  "SR:C23-MG{PS:QM2A}I:Sp1-SP",  "SR:C23-MG{PS:QM2B}I:Sp1-SP",  "SR:C23-MG{PS:SQKM1A}I:Sp1-SP",
                "SR:C24-MG{PS:BT1A}I:Sp1-SP",  "SR:C24-MG{PS:BT1A}I:Sp2-SP",  "SR:C24-MG{PS:CH1A}I:Sp1-SP",  "SR:C24-MG{PS:CH1A}I:Sp2-SP",
                "SR:C24-MG{PS:CH2A}I:Sp1-SP",  "SR:C24-MG{PS:CH2A}I:Sp2-SP",  "SR:C24-MG{PS:CL1B}I:Sp1-SP",  "SR:C24-MG{PS:CL1B}I:Sp2-SP",
                "SR:C24-MG{PS:CL2B}I:Sp1-SP",  "SR:C24-MG{PS:CL2B}I:Sp2-SP",  "SR:C24-MG{PS:CM1A}I:Sp1-SP",  "SR:C24-MG{PS:CM1A}I:Sp2-SP",
                "SR:C24-MG{PS:CM1B}I:Sp1-SP",  "SR:C24-MG{PS:CM1B}I:Sp2-SP",  "SR:C24-MG{PS:QH1A}I:Sp1-SP",  "SR:C24-MG{PS:QH2A}I:Sp1-SP",
                "SR:C24-MG{PS:QH3A}I:Sp1-SP",  "SR:C24-MG{PS:QL1B}I:Sp1-SP",  "SR:C24-MG{PS:QL2B}I:Sp1-SP",  "SR:C24-MG{PS:QL3B}I:Sp1-SP",
                "SR:C24-MG{PS:QM1A}I:Sp1-SP",  "SR:C24-MG{PS:QM1B}I:Sp1-SP",  "SR:C24-MG{PS:QM2A}I:Sp1-SP",  "SR:C24-MG{PS:QM2B}I:Sp1-SP",
                "SR:C24-MG{PS:SH1-P1}I:Sp1-SP",  "SR:C24-MG{PS:SH3-P1}I:Sp1-SP",  "SR:C24-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C25-MG{PS:BT1A}I:Sp1-SP",
                "SR:C25-MG{PS:BT1A}I:Sp2-SP",  "SR:C25-MG{PS:CH1B}I:Sp1-SP",  "SR:C25-MG{PS:CH1B}I:Sp2-SP",  "SR:C25-MG{PS:CH2B}I:Sp1-SP",
                "SR:C25-MG{PS:CH2B}I:Sp2-SP",  "SR:C25-MG{PS:CL1A}I:Sp1-SP",  "SR:C25-MG{PS:CL1A}I:Sp2-SP",  "SR:C25-MG{PS:CL2A}I:Sp1-SP",
                "SR:C25-MG{PS:CL2A}I:Sp2-SP",  "SR:C25-MG{PS:CM1A}I:Sp1-SP",  "SR:C25-MG{PS:CM1A}I:Sp2-SP",  "SR:C25-MG{PS:CM1B}I:Sp1-SP",
                "SR:C25-MG{PS:CM1B}I:Sp2-SP",  "SR:C25-MG{PS:QH1B}I:Sp1-SP",  "SR:C25-MG{PS:QH2B}I:Sp1-SP",  "SR:C25-MG{PS:QH3B}I:Sp1-SP",
                "SR:C25-MG{PS:QL1A}I:Sp1-SP",  "SR:C25-MG{PS:QL2A}I:Sp1-SP",  "SR:C25-MG{PS:QL3A}I:Sp1-SP",  "SR:C25-MG{PS:QM1A}I:Sp1-SP",
                "SR:C25-MG{PS:QM1B}I:Sp1-SP",  "SR:C25-MG{PS:QM2A}I:Sp1-SP",  "SR:C25-MG{PS:QM2B}I:Sp1-SP",  "SR:C25-MG{PS:SH4-P1}I:Sp1-SP",
                "SR:C25-MG{PS:SM1A-P1}I:Sp1-SP",  "SR:C25-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C26-MG{PS:BT1A}I:Sp1-SP",  "SR:C26-MG{PS:BT1A}I:Sp2-SP",
                "SR:C26-MG{PS:CH1A}I:Sp1-SP",  "SR:C26-MG{PS:CH1A}I:Sp2-SP",  "SR:C26-MG{PS:CH2A}I:Sp1-SP",  "SR:C26-MG{PS:CH2A}I:Sp2-SP",
                "SR:C26-MG{PS:CL1B}I:Sp1-SP",  "SR:C26-MG{PS:CL1B}I:Sp2-SP",  "SR:C26-MG{PS:CL2B}I:Sp1-SP",  "SR:C26-MG{PS:CL2B}I:Sp2-SP",
                "SR:C26-MG{PS:CM1A}I:Sp1-SP",  "SR:C26-MG{PS:CM1A}I:Sp2-SP",  "SR:C26-MG{PS:CM1B}I:Sp1-SP",  "SR:C26-MG{PS:CM1B}I:Sp2-SP",
                "SR:C26-MG{PS:QH1A}I:Sp1-SP",  "SR:C26-MG{PS:QH2A}I:Sp1-SP",  "SR:C26-MG{PS:QH3A}I:Sp1-SP",  "SR:C26-MG{PS:QL1B}I:Sp1-SP",
                "SR:C26-MG{PS:QL2B}I:Sp1-SP",  "SR:C26-MG{PS:QL3B}I:Sp1-SP",  "SR:C26-MG{PS:QM1A}I:Sp1-SP",  "SR:C26-MG{PS:QM1B}I:Sp1-SP",
                "SR:C26-MG{PS:QM2A}I:Sp1-SP",  "SR:C26-MG{PS:QM2B}I:Sp1-SP",  "SR:C26-MG{PS:SM1B-P1}I:Sp1-SP",  "SR:C26-MG{PS:SM2B-P1}I:Sp1-SP",
                "SR:C26-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C27-MG{PS:BT1A}I:Sp1-SP",  "SR:C27-MG{PS:BT1A}I:Sp2-SP",  "SR:C27-MG{PS:CH1B}I:Sp1-SP",
                "SR:C27-MG{PS:CH1B}I:Sp2-SP",  "SR:C27-MG{PS:CH2B}I:Sp1-SP",  "SR:C27-MG{PS:CH2B}I:Sp2-SP",  "SR:C27-MG{PS:CL1A}I:Sp1-SP",
                "SR:C27-MG{PS:CL1A}I:Sp2-SP",  "SR:C27-MG{PS:CL2A}I:Sp1-SP",  "SR:C27-MG{PS:CL2A}I:Sp2-SP",  "SR:C27-MG{PS:CM1A}I:Sp1-SP",
                "SR:C27-MG{PS:CM1A}I:Sp2-SP",  "SR:C27-MG{PS:CM1B}I:Sp1-SP",  "SR:C27-MG{PS:CM1B}I:Sp2-SP",  "SR:C27-MG{PS:QH1B}I:Sp1-SP",
                "SR:C27-MG{PS:QH2B}I:Sp1-SP",  "SR:C27-MG{PS:QH3B}I:Sp1-SP",  "SR:C27-MG{PS:QL1A}I:Sp1-SP",  "SR:C27-MG{PS:QL2A}I:Sp1-SP",
                "SR:C27-MG{PS:QL3A}I:Sp1-SP",  "SR:C27-MG{PS:QM1A}I:Sp1-SP",  "SR:C27-MG{PS:QM1B}I:Sp1-SP",  "SR:C27-MG{PS:QM2A}I:Sp1-SP",
                "SR:C27-MG{PS:QM2B}I:Sp1-SP",  "SR:C27-MG{PS:SL2-P1}I:Sp1-SP",  "SR:C27-MG{PS:SL3-P1}I:Sp1-SP",  "SR:C27-MG{PS:SQKM1A}I:Sp1-SP",
                "SR:C28-MG{PS:BT1A}I:Sp1-SP",  "SR:C28-MG{PS:BT1A}I:Sp2-SP",  "SR:C28-MG{PS:CH1A}I:Sp1-SP",  "SR:C28-MG{PS:CH1A}I:Sp2-SP",
                "SR:C28-MG{PS:CH2A}I:Sp1-SP",  "SR:C28-MG{PS:CH2A}I:Sp2-SP",  "SR:C28-MG{PS:CL1B}I:Sp1-SP",  "SR:C28-MG{PS:CL1B}I:Sp2-SP",
                "SR:C28-MG{PS:CL2B}I:Sp1-SP",  "SR:C28-MG{PS:CL2B}I:Sp2-SP",  "SR:C28-MG{PS:CM1A}I:Sp1-SP",  "SR:C28-MG{PS:CM1A}I:Sp2-SP",
                "SR:C28-MG{PS:CM1B}I:Sp1-SP",  "SR:C28-MG{PS:CM1B}I:Sp2-SP",  "SR:C28-MG{PS:QH1A}I:Sp1-SP",  "SR:C28-MG{PS:QH2A}I:Sp1-SP",
                "SR:C28-MG{PS:QH3A}I:Sp1-SP",  "SR:C28-MG{PS:QL1B}I:Sp1-SP",  "SR:C28-MG{PS:QL2B}I:Sp1-SP",  "SR:C28-MG{PS:QL3B}I:Sp1-SP",
                "SR:C28-MG{PS:QM1A}I:Sp1-SP",  "SR:C28-MG{PS:QM1B}I:Sp1-SP",  "SR:C28-MG{PS:QM2A}I:Sp1-SP",  "SR:C28-MG{PS:QM2B}I:Sp1-SP",
                "SR:C28-MG{PS:SH1-DW28}I:Sp1-SP",  "SR:C28-MG{PS:SH3-DW28}I:Sp1-SP",  "SR:C28-MG{PS:SH4-DW28}I:Sp1-SP",  "SR:C28-MG{PS:SL1-P1}I:Sp1-SP",
                "SR:C28-MG{PS:SQKH1A}I:Sp1-SP",  "SR:C29-MG{PS:BT1A}I:Sp1-SP",  "SR:C29-MG{PS:BT1A}I:Sp2-SP",  "SR:C29-MG{PS:CH1B}I:Sp1-SP",
                "SR:C29-MG{PS:CH1B}I:Sp2-SP",  "SR:C29-MG{PS:CH2B}I:Sp1-SP",  "SR:C29-MG{PS:CH2B}I:Sp2-SP",  "SR:C29-MG{PS:CL1A}I:Sp1-SP",
                "SR:C29-MG{PS:CL1A}I:Sp2-SP",  "SR:C29-MG{PS:CL2A}I:Sp1-SP",  "SR:C29-MG{PS:CL2A}I:Sp2-SP",  "SR:C29-MG{PS:CM1A}I:Sp1-SP",
                "SR:C29-MG{PS:CM1A}I:Sp2-SP",  "SR:C29-MG{PS:CM1B}I:Sp1-SP",  "SR:C29-MG{PS:CM1B}I:Sp2-SP",  "SR:C29-MG{PS:QH1B}I:Sp1-SP",
                "SR:C29-MG{PS:QH2B}I:Sp1-SP",  "SR:C29-MG{PS:QH3B}I:Sp1-SP",  "SR:C29-MG{PS:QL1A}I:Sp1-SP",  "SR:C29-MG{PS:QL2A}I:Sp1-SP",
                "SR:C29-MG{PS:QL3A}I:Sp1-SP",  "SR:C29-MG{PS:QM1A}I:Sp1-SP",  "SR:C29-MG{PS:QM1B}I:Sp1-SP",  "SR:C29-MG{PS:QM2A}I:Sp1-SP",
                "SR:C29-MG{PS:QM2B}I:Sp1-SP",  "SR:C29-MG{PS:SQKM1A}I:Sp1-SP",  "SR:C30-MG{PS:BT1A}I:Sp1-SP",  "SR:C30-MG{PS:BT1A}I:Sp2-SP",
                "SR:C30-MG{PS:CH1A}I:Sp1-SP",  "SR:C30-MG{PS:CH1A}I:Sp2-SP",  "SR:C30-MG{PS:CH2A}I:Sp1-SP",  "SR:C30-MG{PS:CH2A}I:Sp2-SP",
                "SR:C30-MG{PS:CL1B}I:Sp1-SP",  "SR:C30-MG{PS:CL1B}I:Sp2-SP",  "SR:C30-MG{PS:CL2B}I:Sp1-SP",  "SR:C30-MG{PS:CL2B}I:Sp2-SP",
                "SR:C30-MG{PS:CM1A}I:Sp1-SP",  "SR:C30-MG{PS:CM1A}I:Sp2-SP",  "SR:C30-MG{PS:CM1B}I:Sp1-SP",  "SR:C30-MG{PS:CM1B}I:Sp2-SP",
                "SR:C30-MG{PS:QH1A}I:Sp1-SP",  "SR:C30-MG{PS:QH2A}I:Sp1-SP",  "SR:C30-MG{PS:QH3A}I:Sp1-SP",  "SR:C30-MG{PS:QL1B}I:Sp1-SP",
                "SR:C30-MG{PS:QL2B}I:Sp1-SP",  "SR:C30-MG{PS:QL3B}I:Sp1-SP",  "SR:C30-MG{PS:QM1A}I:Sp1-SP",  "SR:C30-MG{PS:QM1B}I:Sp1-SP",
                "SR:C30-MG{PS:QM2A}I:Sp1-SP",  "SR:C30-MG{PS:QM2B}I:Sp1-SP",  "SR:C30-MG{PS:SH1-P2}I:Sp1-SP",  "SR:C30-MG{PS:SH3-P2}I:Sp1-SP",
                "SR:C30-MG{PS:SQKH1A}I:Sp1-SP"]
        pvs0 =['SR:C01-MG{PS:SM1A-P2}I:Sp1-SP', 'SR:C02-MG{PS:SM1B-P2}I:Sp1-SP',
               'SR:C02-MG{PS:SM2B-P2}I:Sp1-SP', 'SR:C07-MG{PS:SM1A-P3}I:Sp1-SP',
               'SR:C08-MG{PS:SM1B-P3}I:Sp1-SP', 'SR:C08-MG{PS:SM2B-P3}I:Sp1-SP',
               'SR:C13-MG{PS:SM1A-P4}I:Sp1-SP', 'SR:C14-MG{PS:SM1B-P4}I:Sp1-SP',
               'SR:C14-MG{PS:SM2B-P4}I:Sp1-SP', 'SR:C19-MG{PS:SM1A-P5}I:Sp1-SP',
               'SR:C20-MG{PS:SM1B-P5}I:Sp1-SP', 'SR:C20-MG{PS:SM2B-P5}I:Sp1-SP',
               'SR:C25-MG{PS:SM1A-P1}I:Sp1-SP', 'SR:C26-MG{PS:SM1B-P1}I:Sp1-SP',
               'SR:C26-MG{PS:SM2B-P1}I:Sp1-SP']
        
        with self.assertRaises(KeyError) as context:
            updateconfig(self.conn, self.collection, name, pvlist={"name": pvs0})
        self.assertEqual(context.exception.message, 'Cannot find key ("names") for pv names.')
        
        self.assertTrue(updateconfig(self.conn, self.collection, name, pvlist={"names": pvs}))
        res3 = retrieveconfig(self.conn, self.collection, name, withpvs=True)
        self.assertEqual(res3[0]["status"], "active")
        self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"])
        self.assertEqual(res3[0]["created_on"], res0[0]["created_on"])
        self.assertEqual(res3[0]["pvlist"]["names"], pvs)
        with self.assertRaises(RuntimeError) as context:
            updateconfig(self.conn, self.collection, name, pvlist={"names": pvs0})
        self.assertEqual(context.exception.message, "PV collection list exists already, and should not be changed.")