)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Default (Ia.Ftn.Cl.Model.Data.Huawei)

Public general use code classes and xml files that we've compiled and used over the years:

Defaul general support class for Huawei's Fixed Telecommunications Network (FTN) data model.

    1: using Microsoft.EntityFrameworkCore;
    2: using System;
    3: using System.Collections.Generic;
    4: using System.Data;
    5: using System.Linq;
    6:  
    7: namespace Ia.Ftn.Cl.Model.Data.Huawei
    8: {
    9:     ////////////////////////////////////////////////////////////////////////////
   10:  
   11:     /// <summary publish="true">
   12:     /// Defaul general support class for Huawei's Fixed Telecommunications Network (FTN) data model.
   13:     /// </summary>
   14:     /// 
   15:     /// <remarks> 
   16:     /// Copyright © 2014-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   17:     ///
   18:     /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
   19:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   20:     ///
   21:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   22:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   23:     /// 
   24:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   25:     /// 
   26:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   27:     /// </remarks> 
   28:     public class Default
   29:     {
   30:         private static string[] list;
   31:         private static List<Ia.Ftn.Cl.Model.Business.Huawei.Board.MduDevBoard> mduDevBoardList;
   32:         private static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> mduDevList;
   33:         private static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev> msanDevList;
   34:         private static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> accessNameToMduDevDictionary, accessIdToMduDevDictionary, nddOntIdToMduDevDictionary;
   35:         private static Dictionary<int, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> didToMduDevDictionary;
   36:  
   37:         private static readonly object objectLock = new object();
   38:  
   39:         ////////////////////////////////////////////////////////////////////////////
   40:  
   41:         /// <summary>
   42:         ///
   43:         /// </summary>
   44:         public Default() { }
   45:  
   46:         ////////////////////////////////////////////////////////////////////////////
   47:  
   48:         /// <summary>
   49:         ///
   50:         /// </summary>
   51:         public static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> AccessNameToMduDevDictionary
   52:         {
   53:             get
   54:             {
   55:                 if (accessNameToMduDevDictionary == null || accessNameToMduDevDictionary.Count == 0)
   56:                 {
   57:                     lock (objectLock)
   58:                     {
   59:                         accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default._AccessNameToMduDevDictionary();
   60:                     }
   61:                 }
   62:  
   63:                 return accessNameToMduDevDictionary;
   64:             }
   65:         }
   66:  
   67:         ////////////////////////////////////////////////////////////////////////////
   68:  
   69:         /// <summary>
   70:         ///
   71:         /// </summary>
   72:         private static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessNameToMduDevDictionary()
   73:         {
   74:             accessNameToMduDevDictionary = new Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev>();
   75:  
   76:             var mduDevList = Ia.Ftn.Cl.Model.Data.Huawei.Default.MduDevList;
   77:  
   78:             foreach (var mduDev in mduDevList)
   79:             {
   80:                 if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.NddOntId))
   81:                 {
   82:                     if (!accessNameToMduDevDictionary.ContainsKey(mduDev.AccessName))
   83:                     {
   84:                         accessNameToMduDevDictionary[mduDev.AccessName] = mduDev;
   85:                     }
   86:                     else
   87:                     {
   88:  
   89:                     }
   90:                 }
   91:                 else
   92:                 {
   93:  
   94:                 }
   95:             }
   96:  
   97:             return accessNameToMduDevDictionary;
   98:         }
   99:  
  100:         ////////////////////////////////////////////////////////////////////////////
  101:  
  102:         /// <summary>
  103:         ///
  104:         /// </summary>
  105:         public static Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessName(string accessName)
  106:         {
  107:             Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
  108:  
  109:             var accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default.AccessNameToMduDevDictionary;
  110:  
  111:             if (accessNameToMduDevDictionary.ContainsKey(accessName))
  112:             {
  113:                 mduDev = accessNameToMduDevDictionary[accessName];
  114:             }
  115:             else mduDev = null;
  116:  
  117:             return mduDev;
  118:         }
  119:  
  120:         ////////////////////////////////////////////////////////////////////////////
  121:  
  122:         /// <summary>
  123:         ///
  124:         /// </summary>
  125:         public static void AccessNameToMduDevDictionaryReset()
  126:         {
  127:             accessNameToMduDevDictionary = null;
  128:             mduDevList = null;
  129:             mduDevBoardList = null;
  130:             accessIdToMduDevDictionary = null;
  131:             nddOntIdToMduDevDictionary = null;
  132:             didToMduDevDictionary = null;
  133:         }
  134:  
  135:         ////////////////////////////////////////////////////////////////////////////
  136:         ////////////////////////////////////////////////////////////////////////////
  137:  
  138:         /// <summary>
  139:         ///
  140:         /// </summary>
  141:         public static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> AccessIdToMduDevDictionary
  142:         {
  143:             get
  144:             {
  145:                 if (accessIdToMduDevDictionary == null || accessIdToMduDevDictionary.Count == 0)
  146:                 {
  147:                     lock (objectLock)
  148:                     {
  149:                         accessIdToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default._AccessIdToMduDevDictionary();
  150:                     }
  151:                 }
  152:  
  153:                 return accessIdToMduDevDictionary;
  154:             }
  155:         }
  156:  
  157:         ////////////////////////////////////////////////////////////////////////////
  158:  
  159:         /// <summary>
  160:         ///
  161:         /// </summary>
  162:         private static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessIdToMduDevDictionary()
  163:         {
  164:             accessIdToMduDevDictionary = new Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev>();
  165:  
  166:             var mduDevList = Ia.Ftn.Cl.Model.Data.Huawei.Default.MduDevList;
  167:  
  168:             foreach (var mduDev in mduDevList)
  169:             {
  170:                 if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.AccessId) && !string.IsNullOrEmpty(mduDev.NddOntId))
  171:                 {
  172:                     if (!accessIdToMduDevDictionary.ContainsKey(mduDev.AccessId))
  173:                     {
  174:                         accessIdToMduDevDictionary[mduDev.AccessId] = mduDev;
  175:                     }
  176:                     else
  177:                     {
  178:  
  179:                     }
  180:                 }
  181:                 else
  182:                 {
  183:  
  184:                 }
  185:             }
  186:  
  187:             return accessIdToMduDevDictionary;
  188:         }
  189:  
  190:         ////////////////////////////////////////////////////////////////////////////
  191:  
  192:         /// <summary>
  193:         ///
  194:         /// </summary>
  195:         public static Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessId(string accessId)
  196:         {
  197:             Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
  198:  
  199:             var accessIdToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default.AccessIdToMduDevDictionary;
  200:  
  201:             if (accessIdToMduDevDictionary.ContainsKey(accessId))
  202:             {
  203:                 mduDev = accessIdToMduDevDictionary[accessId];
  204:             }
  205:             else mduDev = null;
  206:  
  207:             return mduDev;
  208:         }
  209:  
  210:         ////////////////////////////////////////////////////////////////////////////
  211:  
  212:         /// <summary>
  213:         ///
  214:         /// </summary>
  215:         public static int MduDevPortByAccessIdFnSnPn(string accessId, int fn, int sn, int pn)
  216:         {
  217:             var mduDev = Ia.Ftn.Cl.Model.Data.Huawei.Default.MduDevByAccessId(accessId);
  218:  
  219:             var port = (mduDev != null) ? mduDev.PortByFnSnPn(fn, sn, pn) : Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
  220:  
  221:             return port;
  222:         }
  223:  
  224:         ////////////////////////////////////////////////////////////////////////////
  225:         ////////////////////////////////////////////////////////////////////////////
  226:  
  227:         /// <summary>
  228:         ///
  229:         /// </summary>
  230:         public static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> NddOntIdToMduDevDictionary
  231:         {
  232:             get
  233:             {
  234:                 if (nddOntIdToMduDevDictionary == null || nddOntIdToMduDevDictionary.Count == 0)
  235:                 {
  236:                     lock (objectLock)
  237:                     {
  238:                         nddOntIdToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default._NddOntIdToMduDevDictionary();
  239:                     }
  240:                 }
  241:  
  242:                 return nddOntIdToMduDevDictionary;
  243:             }
  244:         }
  245:  
  246:         ////////////////////////////////////////////////////////////////////////////
  247:  
  248:         /// <summary>
  249:         ///
  250:         /// </summary>
  251:         private static Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> _NddOntIdToMduDevDictionary()
  252:         {
  253:             nddOntIdToMduDevDictionary = new Dictionary<string, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev>();
  254:  
  255:             var mduDevList = Ia.Ftn.Cl.Model.Data.Huawei.Default.MduDevList;
  256:  
  257:             foreach (var mduDev in mduDevList)
  258:             {
  259:                 if (!string.IsNullOrEmpty(mduDev.NddOntId))
  260:                 {
  261:                     if (!nddOntIdToMduDevDictionary.ContainsKey(mduDev.NddOntId))
  262:                     {
  263:                         nddOntIdToMduDevDictionary[mduDev.NddOntId] = mduDev;
  264:                     }
  265:                     else
  266:                     {
  267:  
  268:                     }
  269:                 }
  270:                 else
  271:                 {
  272:  
  273:                 }
  274:             }
  275:  
  276:             return nddOntIdToMduDevDictionary;
  277:         }
  278:  
  279:         ////////////////////////////////////////////////////////////////////////////
  280:  
  281:         /// <summary>
  282:         ///
  283:         /// </summary>
  284:         public static Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByNddOntId(string nddOntId)
  285:         {
  286:             Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
  287:  
  288:             var nddOntIdToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default.NddOntIdToMduDevDictionary;
  289:  
  290:             if (nddOntIdToMduDevDictionary.ContainsKey(nddOntId))
  291:             {
  292:                 mduDev = nddOntIdToMduDevDictionary[nddOntId];
  293:             }
  294:             else mduDev = null;
  295:  
  296:             return mduDev;
  297:         }
  298:  
  299:         ////////////////////////////////////////////////////////////////////////////
  300:         ////////////////////////////////////////////////////////////////////////////
  301:  
  302:         /// <summary>
  303:         ///
  304:         /// </summary>
  305:         public static Dictionary<int, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> DidToMduDevDictionary
  306:         {
  307:             get
  308:             {
  309:                 if (didToMduDevDictionary == null || didToMduDevDictionary.Count == 0)
  310:                 {
  311:                     lock (objectLock)
  312:                     {
  313:                         didToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default._DidToMduDevDictionary();
  314:                     }
  315:                 }
  316:  
  317:                 return didToMduDevDictionary;
  318:             }
  319:         }
  320:  
  321:         ////////////////////////////////////////////////////////////////////////////
  322:  
  323:         /// <summary>
  324:         ///
  325:         /// </summary>
  326:         private static Dictionary<int, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> _DidToMduDevDictionary()
  327:         {
  328:             didToMduDevDictionary = new Dictionary<int, Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev>();
  329:  
  330:             var mduDevList = Ia.Ftn.Cl.Model.Data.Huawei.Default.MduDevList;
  331:  
  332:             foreach (var mduDev in mduDevList)
  333:             {
  334:                 if (mduDev.Did > -1)
  335:                 {
  336:                     if (!didToMduDevDictionary.ContainsKey(mduDev.Did))
  337:                     {
  338:                         didToMduDevDictionary[mduDev.Did] = mduDev;
  339:                     }
  340:                     else
  341:                     {
  342:  
  343:                     }
  344:                 }
  345:                 else
  346:                 {
  347:  
  348:                 }
  349:             }
  350:  
  351:             return didToMduDevDictionary;
  352:         }
  353:  
  354:         ////////////////////////////////////////////////////////////////////////////
  355:  
  356:         /// <summary>
  357:         ///
  358:         /// </summary>
  359:         public static Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByDid(int did)
  360:         {
  361:             Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
  362:  
  363:             var didToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Default.DidToMduDevDictionary;
  364:  
  365:             if (didToMduDevDictionary.ContainsKey(did))
  366:             {
  367:                 mduDev = didToMduDevDictionary[did];
  368:             }
  369:             else mduDev = null;
  370:  
  371:             return mduDev;
  372:         }
  373:  
  374:         ////////////////////////////////////////////////////////////////////////////
  375:         ////////////////////////////////////////////////////////////////////////////
  376:  
  377:         /// <summary>
  378:         ///
  379:         /// </summary>
  380:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Board.MduDevBoard> MduDevBoardList
  381:         {
  382:             get
  383:             {
  384:                 if (mduDevBoardList == null || mduDevBoardList.Count == 0)
  385:                 {
  386:                     lock (objectLock)
  387:                     {
  388:                         mduDevBoardList = new List<Ia.Ftn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
  389:  
  390:                         var boardList = Ia.Ftn.Cl.Model.Data.Huawei.Default.BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType();
  391:  
  392:                         foreach (var board in boardList)
  393:                         {
  394:                             var mduDevBoard = new Ia.Ftn.Cl.Model.Business.Huawei.Board.MduDevBoard(board.DID, board.BT, board.BNAME, board.BVER, board.EmsDev.Type, board.EmsDev.DEVIP, board.FN, board.SN);
  395:  
  396:                             mduDevBoardList.Add(mduDevBoard);
  397:                         }
  398:                     }
  399:                 }
  400:  
  401:                 return mduDevBoardList;
  402:             }
  403:         }
  404:  
  405:         ////////////////////////////////////////////////////////////////////////////
  406:  
  407:         /// <summary>
  408:         ///
  409:         /// </summary>
  410:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev> MduDevList
  411:         {
  412:             get
  413:             {
  414:                 if (mduDevList == null || mduDevList.Count == 0)
  415:                 {
  416:                     lock (objectLock)
  417:                     {
  418:                         mduDevList = new List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev>();
  419:  
  420:                         var mduDevBoardList = Ia.Ftn.Cl.Model.Data.Huawei.Default.MduDevBoardList;
  421:  
  422:                         foreach (var mduDevBoard in mduDevBoardList)
  423:                         {
  424:                             var did = mduDevBoard.Did;
  425:  
  426:                             var mduDev = (from m in mduDevList where m.Did == did select m).SingleOrDefault();
  427:  
  428:                             if (mduDev != null)
  429:                             {
  430:                                 mduDev.MduDevBoardList.Add(mduDevBoard);
  431:                             }
  432:                             else
  433:                             {
  434:                                 mduDev = new Ia.Ftn.Cl.Model.Business.Huawei.Dev.MduDev(did)
  435:                                 {
  436:                                     DevType = mduDevBoard.EmsDevType,
  437:                                     DevIp = mduDevBoard.EmsDevIp,
  438:                                 };
  439:  
  440:                                 mduDev.MduDevBoardList = new List<Ia.Ftn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
  441:                                 mduDev.MduDevBoardList.Add(mduDevBoard);
  442:  
  443:                                 mduDevList.Add(mduDev);
  444:                             }
  445:                         }
  446:  
  447:                         foreach (var mduDev in mduDevList)
  448:                         {
  449:                             mduDev.TelPortCount = mduDev.MduDevBoardList.Select(i => i.TelPortCount).Sum();
  450:                             mduDev.EthernetPortCount = mduDev.MduDevBoardList.Select(i => i.EthernetPortCount).Sum();
  451:  
  452:                             mduDev.PossibleFnSnPnPortList = Ia.Ftn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMduDevList(mduDev);
  453:                             mduDev.FirstFnSnPnPort = Ia.Ftn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMduDevList(mduDev);
  454:                         }
  455:                     }
  456:                 }
  457:  
  458:                 return mduDevList;
  459:             }
  460:         }
  461:  
  462:         ////////////////////////////////////////////////////////////////////////////
  463:  
  464:         /// <summary>
  465:         ///
  466:         /// </summary>
  467:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev> MsanDevList
  468:         {
  469:             get
  470:             {
  471:                 if (msanDevList == null || msanDevList.Count == 0)
  472:                 {
  473:                     lock (objectLock)
  474:                     {
  475:                         int did;
  476:                         Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
  477:  
  478:                         msanDevList = new List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev>();
  479:  
  480:                         foreach (var dev in Ia.Ftn.Cl.Model.Data.Huawei.Dev.MsanDevList())
  481:                         {
  482:                             //if (dev.DEV == "SLM_MSAN_A01_F00");
  483:                             //else
  484:                             //{
  485:                             did = dev.DID;
  486:  
  487:                             msanDev = new Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev(did);
  488:  
  489:                             if (!string.IsNullOrEmpty(msanDev.Id)) msanDevList.Add(msanDev);
  490:                             //}
  491:                         }
  492:  
  493:                         foreach (var msanDev0 in msanDevList)
  494:                         {
  495:                             msanDev0.PossibleFnSnPnList = Ia.Ftn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMsanDevList();
  496:                             msanDev0.FirstFnSnPn = Ia.Ftn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMsanDevList();
  497:                         }
  498:                     }
  499:                 }
  500:  
  501:                 return msanDevList;
  502:             }
  503:         }
  504:  
  505:         ////////////////////////////////////////////////////////////////////////////
  506:  
  507:         /// <summary>
  508:         ///
  509:         /// </summary>
  510:         public static Dictionary<Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Site, int> MsanSiteToServiceCountDictionary()
  511:         {
  512:             int count;
  513:             Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Site site;
  514:             List<int> didList;
  515:  
  516:             var msanDevDidToDnCountDictionary = Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
  517:  
  518:             var msanSiteToDidListDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
  519:  
  520:             var dictionary = new Dictionary<Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Site, int>();
  521:  
  522:             foreach (KeyValuePair<Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Site, List<int>> kvp in msanSiteToDidListDictionary)
  523:             {
  524:                 site = kvp.Key;
  525:                 didList = kvp.Value;
  526:  
  527:                 foreach (int did in didList)
  528:                 {
  529:                     count = msanDevDidToDnCountDictionary.ContainsKey(did) ? msanDevDidToDnCountDictionary[did] : 0;
  530:  
  531:                     if (!dictionary.ContainsKey(site)) dictionary[site] = count;
  532:                     else dictionary[site] += count;
  533:                 }
  534:             }
  535:  
  536:             return dictionary;
  537:         }
  538:  
  539:         ////////////////////////////////////////////////////////////////////////////
  540:  
  541:         /// <summary>
  542:         ///
  543:         /// </summary>
  544:         public static Dictionary<string, int> MsanDevDevToDnCountDictionary
  545:         {
  546:             get
  547:             {
  548:                 var msanDevList = Ia.Ftn.Cl.Model.Data.Huawei.Default.MsanDevList;
  549:  
  550:                 var msanDevDidToDnCountDictionary = Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
  551:  
  552:                 var dictionary = new Dictionary<string, int>();
  553:  
  554:                 foreach (var msanDev in msanDevList)
  555:                 {
  556:                     dictionary[msanDev.Dev] = msanDevDidToDnCountDictionary.ContainsKey(msanDev.Did) ? msanDevDidToDnCountDictionary[msanDev.Did] : 0;
  557:                 }
  558:  
  559:                 return dictionary;
  560:             }
  561:         }
  562:  
  563:         ////////////////////////////////////////////////////////////////////////////
  564:  
  565:         /// <summary>
  566:         ///
  567:         /// </summary>
  568:         public static List<string> MsanServiceListBySiteId(int siteId)
  569:         {
  570:             var msanSiteToDidListDictionary = Ia.Ftn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
  571:  
  572:             var didList = (from l in msanSiteToDidListDictionary
  573:                            where l.Key.Id == siteId
  574:                            select l.Value).SingleOrDefault();
  575:  
  576:             if (didList == null) didList = new List<int>();
  577:  
  578:             var dnServiceList = Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.DnServiceListByMsanDevDidList(didList);
  579:  
  580:             return dnServiceList;
  581:         }
  582:  
  583:         ////////////////////////////////////////////////////////////////////////////
  584:  
  585:         /// <summary>
  586:         ///
  587:         /// </summary>
  588:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsan(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
  589:         {
  590:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
  591:         }
  592:  
  593:         ////////////////////////////////////////////////////////////////////////////
  594:  
  595:         /// <summary>
  596:         ///
  597:         /// </summary>
  598:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinet(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet)
  599:         {
  600:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinet(msan, cabinet);
  601:         }
  602:  
  603:         ////////////////////////////////////////////////////////////////////////////
  604:  
  605:         /// <summary>
  606:         ///
  607:         /// </summary>
  608:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrame(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame)
  609:         {
  610:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrame(msan, cabinet, frame);
  611:         }
  612:  
  613:         ////////////////////////////////////////////////////////////////////////////
  614:  
  615:         /// <summary>
  616:         ///
  617:         /// </summary>
  618:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn)
  619:         {
  620:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(msan, cabinet, frame, fn);
  621:         }
  622:  
  623:         ////////////////////////////////////////////////////////////////////////////
  624:  
  625:         /// <summary>
  626:         ///
  627:         /// </summary>
  628:         public static List<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn)
  629:         {
  630:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(msan, cabinet, frame, fn, sn);
  631:         }
  632:  
  633:         ////////////////////////////////////////////////////////////////////////////
  634:  
  635:         /// <summary>
  636:         ///
  637:         /// </summary>
  638:         public static Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByEmsVoipPstnUserId(string emsVoipPstnUserId)
  639:         {
  640:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUserId);
  641:         }
  642:  
  643:         ////////////////////////////////////////////////////////////////////////////
  644:  
  645:         /// <summary>
  646:         ///
  647:         /// </summary>
  648:         public static Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn, int pn)
  649:         {
  650:             return Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(msan, cabinet, frame, fn, sn, pn);
  651:         }
  652:  
  653:         ////////////////////////////////////////////////////////////////////////////
  654:  
  655:         /// <summary>
  656:         ///
  657:         /// </summary>
  658:         public static Dictionary<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string> MsanDevLicToServiceByMsanDictionary(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
  659:         {
  660:             var msanDevLicList = Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
  661:  
  662:             var dictionary = new Dictionary<Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string>();
  663:  
  664:             foreach (var msanDevLic in msanDevLicList)
  665:             {
  666:                 dictionary[msanDevLic] = msanDevLic.Service;
  667:             }
  668:  
  669:             return dictionary;
  670:         }
  671:  
  672:         ////////////////////////////////////////////////////////////////////////////
  673:  
  674:         /// <summary>
  675:         ///
  676:         /// </summary>
  677:         public static Dictionary<string, string> MsanDevLicCabinetFrameSnPnTextStringToServiceByMsanDictionary(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
  678:         {
  679:             string cabinetFrameSnPnTextString;
  680:  
  681:             var msanDevLicList = Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
  682:  
  683:             var dictionary = new Dictionary<string, string>();
  684:  
  685:             foreach (var msanDevLic in msanDevLicList)
  686:             {
  687:                 cabinetFrameSnPnTextString = msanDevLic.ToCabinetFrameSnPnTextString();
  688:  
  689:                 dictionary[cabinetFrameSnPnTextString] = msanDevLic.Service;
  690:             }
  691:  
  692:             return dictionary;
  693:         }
  694:  
  695:         ////////////////////////////////////////////////////////////////////////////
  696:  
  697:         /// <summary>
  698:         ///
  699:         /// </summary>
  700:         public static List<Ia.Ftn.Cl.Model.Huawei.EmsBoard> BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType()
  701:         {
  702:             List<Ia.Ftn.Cl.Model.Huawei.EmsBoard> list;
  703:  
  704:             using (var db = new Ia.Ftn.Cl.Model.Db())
  705:             {
  706:                 list = (from ed in db.EmsDevs
  707:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  708:                         where (ed.DT == "MA5616" || ed.DT == "MA5878") && (eb.BT == "PSTN" || eb.BT == "ETH")
  709:                         select eb).Include(u => u.EmsDev).ToList();
  710:  
  711:                 /*
  712: select distinct * from EmsDevs ed
  713: left outer join EmsBoards eb on ed.Id = eb.EmsDev_Id
  714: where (ed.DT = 'MA5616' or ed.DT = 'MA5878') and (eb.BT = 'PSTN' or eb.BT = 'ETH')
  715: order by ed.DT, ed.DEV 
  716:                 */
  717:             }
  718:  
  719:             return list;
  720:         }
  721:  
  722:         ////////////////////////////////////////////////////////////////////////////
  723:  
  724:         /// <summary>
  725:         ///
  726:         /// </summary>
  727:         public static List<Ia.Ftn.Cl.Model.Access> AccessListBy5616Or5878OntEquipmentId()
  728:         {
  729:             List<Ia.Ftn.Cl.Model.Access> list;
  730:  
  731:             using (var db = new Ia.Ftn.Cl.Model.Db())
  732:             {
  733:                 list = (from a in db.Accesses
  734:                         join eo in db.EmsOnts on a equals eo.Access
  735:                         join ed in db.EmsDevs on eo.NAME equals ed.DEVIP into gj
  736:                         from sgj in gj.DefaultIfEmpty()
  737:                         where eo.EQUIPMENTID == "5616" || eo.EQUIPMENTID == "5878"
  738:                         select a).ToList(); //.Include(u => u.EmsDev).ToList();
  739:                 /*
  740:                 select a.Id, eo.NAME, eo.ALIAS, eo.EQUIPMENTID, ed.DEVIP, ed.DEV from Accesses a
  741:                 inner join EmsOnts eo on a.Id = eo.Access_Id
  742:                 left outer join EmsDevs ed on ed.DEVIP = eo.NAME 
  743:                 where eo.EQUIPMENTID = '5616' or eo.EQUIPMENTID = '5878'
  744:                 */
  745:             }
  746:  
  747:             return list;
  748:         }
  749:  
  750:         ////////////////////////////////////////////////////////////////////////////
  751:  
  752:         /// <summary>
  753:         ///
  754:         /// </summary>
  755:         public static List<string> MsanPortIdList()
  756:         {
  757:             List<string> list;
  758:  
  759:             //var possibleSnList = Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.PossibleSnList; or just check if EmsBoard.BT = "PSTN"
  760:  
  761:             //  var dev = Ia.Ftn.Cl.Model.Data.Huawei.Dev.MsanDevDidList();
  762:  
  763:             // The EmsPort list is about 230K big. I can't LINQ directly.
  764:  
  765:             using (var db = new Ia.Ftn.Cl.Model.Db())
  766:             {
  767:                 var emsDevDidDevList = (from ed in db.EmsDevs select new { ed.DID, ed.DEV }).ToList();
  768:  
  769:                 var emsMsanDevDidList = emsDevDidDevList.Where(u => u.DEV.Contains("_MSAN_")).Select(u => u.DID).ToList();
  770:  
  771:                 /*
  772:                  * too slow
  773:                 list = (from ed in db.EmsDevs
  774:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  775:                         join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
  776:                         where ed.DEV.Contains("_MSAN_") && eb.BT == "PSTN"
  777:                         select ep).ToList();
  778:                 */
  779:  
  780:                 /*
  781:                  * too slow
  782:                 list = (from ed in db.EmsDevs
  783:                         where emsMsanDevDidList.Contains(ed.DID)
  784:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  785:                         join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
  786:                         select ep).ToList();
  787:                 */
  788:  
  789:                 var portIdDidList = (from ep in db.EmsPorts select new { ep.Id, ep.DID }).ToList();
  790:  
  791:                 list = (from ep in portIdDidList where emsMsanDevDidList.Contains(ep.DID) select ep.Id).ToList();
  792:             }
  793:  
  794:             return list;
  795:         }
  796:  
  797:         ////////////////////////////////////////////////////////////////////////////
  798:  
  799:         /// <summary>
  800:         ///
  801:         /// </summary>
  802:         public static List<Ia.Ftn.Cl.Model.Huawei.EmsPort> MsanPortList(Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev)
  803:         {
  804:             List<Ia.Ftn.Cl.Model.Huawei.EmsPort> list;
  805:  
  806:             using (var db = new Ia.Ftn.Cl.Model.Db())
  807:             {
  808:                 list = (from ed in db.EmsDevs
  809:                         where ed.DID == msanDev.Did
  810:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  811:                         join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
  812:                         select ep).Include(ep => ep.EmsBoard).Include(ep => ep.EmsBoard.EmsDev).AsNoTracking().ToList();
  813:             }
  814:  
  815:             return list;
  816:         }
  817:  
  818:         ////////////////////////////////////////////////////////////////////////////
  819:  
  820:         /// <summary>
  821:         ///
  822:         /// </summary>
  823:         public static List<string> DuplicateEmsOntSipInfoSipUserNameAndEmsVoipPstnUserMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList()
  824:         {
  825:             var list0 = Ia.Ftn.Cl.Model.Data.Huawei.OntSipInfo.DuplicateSipUserNameServiceList();
  826:             var list1 = Ia.Ftn.Cl.Model.Data.Huawei.VoipPstnUser.DuplicateMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList();
  827:  
  828:             var list = list0.Union(list1).Distinct().ToList();
  829:  
  830:             return list;
  831:         }
  832:  
  833:         ////////////////////////////////////////////////////////////////////////////
  834:  
  835:         /// <summary>
  836:         ///
  837:         /// </summary>
  838:         public static void UnrecognizedEmsDevAndEmsOntList(out List<string> unrecognizedDevList, out List<string> unrecognizedOntList)
  839:         {
  840:             string name;
  841:             unrecognizedDevList = new List<string>();
  842:             unrecognizedOntList = new List<string>();
  843:  
  844:             var devList = Ia.Ftn.Cl.Model.Data.Huawei.Dev.DevList();
  845:             var msanDevDevList = Ia.Ftn.Cl.Model.Data.Huawei.Dev.MsanDevDevList();
  846:             var nddOltList = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OltList;
  847:  
  848:             foreach (var dev in devList)
  849:             {
  850:                 name = Ia.Ftn.Cl.Model.Business.Huawei.Ems.HuaweiAccessNameFormatFromInaccurateHuaweiFileAndEmsNameFormat(dev);
  851:                 name = Ia.Ftn.Cl.Model.Business.Default.StandardizeAccessNameInLegalFormatFromValue(name);
  852:  
  853:                 if (string.IsNullOrEmpty(name))
  854:                 {
  855:                     if (msanDevDevList.Contains(dev))
  856:                     {
  857:                     }
  858:                     else
  859:                     {
  860:                         if (nddOltList.Any(u => u.EmsName == dev))
  861:                         {
  862:                         }
  863:                         else
  864:                         {
  865:                             unrecognizedDevList.Add(dev);
  866:                         }
  867:                     }
  868:                 }
  869:             }
  870:  
  871:             var emsOntNullAccessList = Ia.Ftn.Cl.Model.Data.Huawei.Ont.ListWithNullAccess();
  872:  
  873:             foreach (var o in emsOntNullAccessList)
  874:             {
  875:                 unrecognizedOntList.Add(o.ALIAS + ":" + o.NAME);
  876:             }
  877:         }
  878:  
  879:         ////////////////////////////////////////////////////////////////////////////
  880:  
  881:         /// <summary>
  882:         ///
  883:         /// </summary>
  884:         public static string[] ListOfHuaweiOntThatWereIntiallyInstalledAndProvisionedWithNokiaMgcIp10_16_5_37BeforeNewMgcIpToCableDistributionAgreement
  885:         {
  886:             get
  887:             {
  888:                 if (list == null || list.Length == 0)
  889:                 {
  890:                     list = new string[] { "SAA.501.2","SAA.501.10","SAA.501.11","SAA.501.13","SAA.501.19","SAA.501.20","SAA.501.21","SAA.501.22","SAA.502.1","SAA.502.7","SAA.502.8","SAA.502.11","SAA.502.12","SAA.502.14","SAA.502.16","SAA.502.18","SAA.502.19","SAA.502.22","SAA.503.1","SAA.503.2","SAA.504.4","SAA.504.6","SAA.504.10","SAA.504.11","SAA.504.12","SAA.504.13","SAA.504.15","SAA.504.17","SAA.504.18","SAA.504.24","SAA.505.2","SAA.506.8","SAA.506.10","SAA.506.16","SAA.506.18","SAA.507.16","SAA.508.3","SAA.508.8","SAA.508.16","SAA.508.17","SAA.508.18","SAA.508.20","SAA.508.21","SAA.509.5","SAA.509.7","SAA.509.8","SAA.509.12","SAA.509.13","SAA.509.14","SAA.509.17","SAA.509.19","SAA.509.20","SAA.510.4","SAA.510.5","SAA.510.14","SAA.511.3","SAA.511.4","SAA.511.9","SAA.511.10","SAA.511.13","SAA.511.16","SAA.512.2","SAA.512.13","SAA.512.14","SAA.512.15","SAA.514.1","SAA.514.2","SAA.514.5","SAA.514.6","SAA.514.8","SAA.514.11","SAA.514.12","SAA.514.13","SAA.514.14","SAA.514.15","SAA.514.16","SAA.514.22","SAA.517.7","SAA.517.8","SAA.517.9","SAA.517.10","SAA.517.12","SAA.517.15","SAA.517.16","SAA.518.2","SAA.518.3","SAA.518.5","SAA.518.11","SAA.518.14","SAA.518.16","SAA.519.1","SAA.519.2","SAA.519.6","SAA.519.10","SAA.519.15","SAA.519.16","SAA.519.17","SAA.519.18","SAA.519.23","SAA.521.4","SAA.521.10",
  891:                         "SAA.521.20","SAA.521.23","SAA.522.1","SAA.522.6","SAA.522.9","SAA.522.10","SAA.522.11","SAA.522.13","SAA.522.16","SAA.523.1","SAA.523.2","SAA.523.3","SAA.523.5","SAA.523.7","SAA.523.9","SAA.523.10","SAA.523.12","SAA.523.13","SAA.523.14","SAA.523.15","SAA.523.16","SAA.523.18","SAA.523.19","SAA.524.1","SAA.524.3","SAA.524.6","SAA.524.8","SAA.524.9","SAA.524.10","SAA.524.11","SAA.524.12","SAA.524.14","SAA.524.17","SAA.524.18","SAA.528.3","SAA.528.5","SAA.528.6","SAA.528.7","SAA.528.10","SAA.528.11","SAA.528.15","SAA.528.17","SAA.528.19","SAA.528.20","SAA.528.21","SAA.530.1","SAA.530.5","SAA.530.6","SAA.530.7","SAA.530.8","SAA.530.9","SAA.530.10","SAA.530.11","SAA.530.12","SAA.530.13","SAA.530.16","SAA.530.17","SAA.530.19","SAA.531.1","SAA.531.4","SAA.531.6","SAA.531.7","SAA.531.15","SAA.531.17","SAA.531.19","SAA.531.20","SAA.531.22","SAA.531.23","SAA.533.2","SAA.533.8","SAA.533.9","SAA.533.17","SAA.533.19","SAA.533.20","SAA.533.21","SAA.533.23","SAA.534.1","SAA.534.2","SAA.534.3","SAA.534.4","SAA.534.10","SAA.534.12","SAA.534.18","SAA.534.20","SAA.534.21","SAA.535.1","SAA.535.15","SAA.535.16","SAA.535.17","SAA.535.18",
  892:                         "SAA.536.1","SAA.536.2","SAA.536.3","SAA.536.4","SAA.536.6","SAA.536.9","SAA.536.13","SAA.536.15","SAA.537.1","SAA.537.4","SAA.537.6","SAA.537.7","SAA.537.8","SAA.537.9","SAA.537.10","SAA.537.13","SAA.537.14","SAA.537.15","SAA.537.16","SAA.537.22","SAA.538.1","SAA.538.4","SAA.538.9","SAA.538.10","SAA.538.14","SAA.538.15","SAA.538.17","SAA.538.18","SAA.538.19","SAA.539.2","SAA.539.3","SAA.539.5","SAA.539.6","SAA.539.7","SAA.539.8","SAA.539.9","SAA.539.18","SAA.539.19","SAA.539.20","SAA.541.2","SAA.541.6","SAA.541.7","SAA.541.9","SAA.541.10","SAA.541.13","SAA.541.15","SAA.541.21","SAA.541.23","SAA.541.24","SAA.542.1","SAA.542.3","SAA.542.6","SAA.542.7","SAA.542.8","SAA.542.9","SAA.542.21","SAA.543.5","SAA.543.9","SAA.543.10","SAA.543.16","SAA.544.4","SAA.544.10","SAA.544.11","SAA.544.12","SAA.544.15","SAA.544.22","SAA.544.23","SAA.545.9","SAA.701.1","SAA.701.2","SAA.701.3","SAA.701.4","SAA.701.5","SAA.701.6","SAA.701.7","SAA.701.9","SAA.701.10","SAA.701.11","SAA.701.13","SAA.701.14","SAA.701.15","SAA.701.16","SAA.701.17","SAA.702.1","SAA.702.2","SAA.702.3","SAA.702.4","SAA.702.5","SAA.702.8","SAA.702.9","SAA.702.10","SAA.702.12","SAA.702.14","SAA.702.16","SAA.702.17","SAA.702.21","SAA.702.22","SAA.702.23","SAA.702.24","SAA.703.2","SAA.703.3","SAA.703.11","SAA.703.14","SAA.703.15",
  893:                         "SAA.703.17","SAA.703.19","SAA.703.20","SAA.703.23","SAA.704.3","SAA.704.4","SAA.704.6","SAA.704.7","SAA.704.9","SAA.704.10","SAA.704.13","SAA.704.15","SAA.704.16","SAA.704.17","SAA.704.18","SAA.706.5","SAA.706.6","SAA.706.7","SAA.706.8","SAA.706.11","SAA.706.12","SAA.706.15","SAA.706.16","SAA.706.17","SAA.706.20","SAA.706.21","SAA.706.23","SAA.706.24","SAA.707.2","SAA.707.5","SAA.707.7","SAA.707.10","SAA.707.12","SAA.707.13","SAA.707.15","SAA.707.17","SAA.707.19","SAA.707.20","SAA.707.21","SAA.707.22","SAA.709.1","SAA.709.3","SAA.709.7","SAA.709.8","SAA.709.14","SAA.709.15","SAA.709.18","SAA.709.19","SAA.709.23","SAA.709.24","SAA.710.3","SAA.710.4","SAA.710.12","SAA.710.15","SAA.710.16","SAA.710.19","SAA.710.21","SAA.710.22","SAA.710.24","SAA.711.1","SAA.711.3","SAA.711.5","SAA.711.9","SAA.711.11","SAA.711.12","SAA.711.13","SAA.711.14","SAA.711.16","SAA.711.18","SAA.711.19","SAA.711.20","SAA.711.23","SAA.711.24","SAA.712.2","SAA.712.3","SAA.712.4","SAA.712.6","SAA.712.7","SAA.712.9","SAA.712.12",
  894:                         "SAA.712.16","SAA.712.18","SAA.712.19","SAA.712.20","SAA.712.21","SAA.712.26","SAA.712.27","SAA.714.2","SAA.714.3","SAA.714.8","SAA.714.11","SAA.715.5","SAA.715.7","SAA.715.8","SAA.715.9","SAA.715.10","SAA.715.11","SAA.715.12","SAA.715.15","SAA.715.18","SAA.715.19","SAA.716.2","SAA.716.3","SAA.716.4","SAA.716.6","SAA.716.8","SAA.716.11","SAA.716.12","SAA.716.15","SAA.716.17","SAA.716.20","SAA.716.21","SAA.717.3","SAA.717.5","SAA.717.7","SAA.717.10","SAA.717.13","SAA.717.14","SAA.717.15","SAA.717.18","SAA.717.20","SAA.717.21","SAA.717.22","SAA.718.1","SAA.718.2","SAA.718.3","SAA.718.5","SAA.718.6","SAA.718.7","SAA.718.11","SAA.718.22","SAA.718.23","SAA.718.24","SAA.718.25","SAA.719.2","SAA.719.4","SAA.719.8","SAA.719.9","SAA.719.10","SAA.719.11","SAA.719.12","SAA.719.14","SAA.719.17","SAA.719.20","SAA.719.23","SAA.720.3","SAA.720.4","SAA.720.6","SAA.720.7","SAA.720.10","SAA.720.13","SAA.720.14","SAA.721.2","SAA.721.3","SAA.721.4","SAA.721.7","SAA.721.8","SAA.721.10","SAA.721.11","SAA.721.12","SAA.721.13","SAA.721.14","SAA.721.18","SAA.721.19","SAA.721.20","SAA.721.23","SAA.722.11","SAA.722.12","SAA.722.13","SAA.722.16","SAA.722.17","SAA.722.18","SAA.722.19","SAA.722.22","SAA.722.24","SAA.723.2","SAA.723.3","SAA.723.4","SAA.723.7","SAA.723.9","SAA.723.13","SAA.723.15","SAA.723.17",
  895:                         "SAA.723.19","SAA.723.20","SAA.723.22","SAA.723.23","SAA.724.5","SAA.724.6","SAA.724.8","SAA.724.11","SAA.724.14","SAA.724.15","SAA.724.16","SAA.724.17","SAA.724.18","SAA.726.2","SAA.726.7","SAA.726.8","SAA.726.9","SAA.726.10","SAA.726.11","SAA.726.12","SAA.726.13","SAA.726.14","SAA.726.17","SAA.726.20","SAA.726.21","SAA.726.22","SAA.726.23","SAA.729.2","SAA.729.3","SAA.729.4","SAA.729.5","SAA.729.6","SAA.729.10","SAA.729.11","SAA.729.14","SAA.729.17","SAA.729.18","SAA.729.19","SAA.729.20","SAA.729.21","SAA.730.4","SAA.730.5","SAA.730.8","SAA.730.9","SAA.730.11","SAA.730.12","SAA.730.13","SAA.730.14","SAA.730.22","SAA.733.2","SAA.733.3","SAA.733.5","SAA.733.6","SAA.733.9","SAA.733.10","SAA.734.1","SAA.734.2","SAA.734.3","SAA.734.4","SAA.734.5","SAA.734.6","SAA.734.7","SAA.734.11","SAA.734.12","SAA.734.13","SAA.734.15","SAA.734.17","SAA.734.19","SAA.734.20","SAA.735.7","SAA.735.8","SAA.735.10","SAA.735.12","SAA.735.14","SAA.735.19","SAA.735.22","SAA.736.3","SAA.736.4","SAA.736.7","SAA.736.8","SAA.736.9","SAA.736.10","SAA.736.17","SAA.736.18","SAA.736.21","SAA.736.22","SAA.736.23","SAA.737.5","SAA.737.6","SAA.737.8",
  896:                         "SAA.737.11","SAA.737.13","SAA.737.15","SAA.737.16","SAA.737.18","SAA.738.4","SAA.738.7","SAA.738.8","SAA.738.11","SAA.738.13","SAA.738.14","SAA.738.16","SAA.738.18","SAA.739.1","SAA.739.2","SAA.739.3","SAA.739.13","SAA.739.14","SAA.739.15","SAA.739.18","SAA.739.19","SAA.739.20","SAA.740.7","SAA.740.20","SAA.742.2","SAA.742.3","SAA.742.5","SAA.742.6","SAA.742.7","SAA.742.11","SAA.742.12","SAA.742.14","SAA.742.15","SAA.742.17","SAA.742.18","SAA.742.20","SAA.742.21","SAA.742.23","SAA.742.25","SAA.743.4","SAA.743.7","SAA.743.9","SAA.743.10","SAA.743.13","SAA.743.16","SAA.743.19","SAA.743.21","SAA.743.22","SAA.743.23","SAA.743.24","SAA.744.5","SAA.744.6","SAA.744.7","SAA.744.22","SAA.745.12","SAA.746.12","SAA.747.2","SAA.747.4","SAA.750.1","SAA.750.6","SAA.750.7","SAA.750.12","SAA.750.16","SAA.750.19","SAA.750.20","SAA.750.26","SAA.751.1","SAA.751.2","SAA.751.3","SAA.751.7","SAA.751.8","SAA.751.13","SAA.751.16","SAA.751.17","SAA.751.18","SAA.751.22","SAA.752.1","SAA.752.3","SAA.752.5","SAA.752.11","SAA.752.13","SAA.752.14","SAA.752.15","SAA.752.17","SAA.752.18","SAA.752.21","SAA.802.6","SAA.802.8","SAA.802.10","SAA.802.11","SAA.802.12","SAA.802.13","SAA.802.16","SAA.802.17","SAA.802.20","SAA.804.3","SAA.804.4","SAA.804.5","SAA.804.6","SAA.804.11","SAA.805.21","SAA.806.24","SAA.807.1",
  897:                         "SAA.807.7","SAA.807.16","SAA.807.17","SAA.807.20","SAA.808.2","SAA.808.4","SAA.808.5","SAA.808.8","SAA.808.9","SAA.808.13","SAA.811.3","SAA.813.1","SAA.813.3","SAA.813.4","SAA.813.5","SAA.813.10","SAA.813.12","SAA.813.15","SAA.813.16","SAA.814.2","SAA.814.3","SAA.814.5","SAA.814.9","SAA.814.11","SAA.814.16","SAA.814.18","SAA.814.19","SAA.814.23","SAA.814.24","SAA.815.1","SAA.815.2","SAA.815.7","SAA.815.9","SAA.815.10","SAA.815.11","SAA.815.12","SAA.815.13","SAA.815.14","SAA.815.15","SAA.815.16","SAA.815.18","SAA.815.19","SAA.815.20","SAA.815.21","SAA.815.26","SAA.819.1","SAA.819.2","SAA.819.4","SAA.819.5","SAA.819.6","SAA.819.8","SAA.819.13","SAA.819.17","SAA.822.9","SAA.826.18","SAA.827.13","SAA.827.14","SAA.837.21","SAA.846.4","SAA.846.10"
  898:                     };
  899:                 }
  900:  
  901:                 return list;
  902:             }
  903:         }
  904:  
  905:         ////////////////////////////////////////////////////////////////////////////
  906:         ////////////////////////////////////////////////////////////////////////////   
  907:     }
  908:  
  909:     ////////////////////////////////////////////////////////////////////////////
  910:     ////////////////////////////////////////////////////////////////////////////   
  911: }