شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Default

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

Defaul general support class for Huawei's Optical Fiber Network (OFN) 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.Ngn.Cl.Model.Data.Huawei
   8:  {
   9:      ////////////////////////////////////////////////////////////////////////////
  10:   
  11:      /// <summary publish="true">
  12:      /// Defaul general support class for Huawei's Optical Fiber Network (OFN) 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.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard> mduDevBoardList;
  32:          private static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> mduDevList;
  33:          private static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev> msanDevList;
  34:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> accessNameToMduDevDictionary, accessIdToMduDevDictionary, nddOntIdToMduDevDictionary;
  35:          private static Dictionary<int, Ia.Ngn.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.Ngn.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.Ngn.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.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessNameToMduDevDictionary()
  73:          {
  74:              accessNameToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
  75:   
  76:              foreach (var mduDev in Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList)
  77:              {
  78:                  if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.NddOntId))
  79:                  {
  80:                      if (!accessNameToMduDevDictionary.ContainsKey(mduDev.AccessName))
  81:                      {
  82:                          accessNameToMduDevDictionary[mduDev.AccessName] = mduDev;
  83:                      }
  84:                      else
  85:                      {
  86:   
  87:                      }
  88:                  }
  89:                  else
  90:                  {
  91:   
  92:                  }
  93:              }
  94:   
  95:              return accessNameToMduDevDictionary;
  96:          }
  97:   
  98:          ////////////////////////////////////////////////////////////////////////////
  99:   
 100:          /// <summary>
 101:          ///
 102:          /// </summary>
 103:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessName(string accessName)
 104:          {
 105:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 106:   
 107:              var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.AccessNameToMduDevDictionary;
 108:   
 109:              if (accessNameToMduDevDictionary.ContainsKey(accessName))
 110:              {
 111:                  mduDev = accessNameToMduDevDictionary[accessName];
 112:              }
 113:              else mduDev = null;
 114:   
 115:              return mduDev;
 116:          }
 117:   
 118:          ////////////////////////////////////////////////////////////////////////////
 119:   
 120:          /// <summary>
 121:          ///
 122:          /// </summary>
 123:          public static void AccessNameToMduDevDictionaryReset()
 124:          {
 125:              accessNameToMduDevDictionary = null;
 126:              mduDevList = null;
 127:              mduDevBoardList = null;
 128:              accessIdToMduDevDictionary = null;
 129:              nddOntIdToMduDevDictionary = null;
 130:              didToMduDevDictionary = null;
 131:          }
 132:   
 133:          ////////////////////////////////////////////////////////////////////////////
 134:          ////////////////////////////////////////////////////////////////////////////
 135:   
 136:          /// <summary>
 137:          ///
 138:          /// </summary>
 139:          public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> AccessIdToMduDevDictionary
 140:          {
 141:              get
 142:              {
 143:                  if (accessIdToMduDevDictionary == null || accessIdToMduDevDictionary.Count == 0)
 144:                  {
 145:                      lock (objectLock)
 146:                      {
 147:                          accessIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._AccessIdToMduDevDictionary();
 148:                      }
 149:                  }
 150:   
 151:                  return accessIdToMduDevDictionary;
 152:              }
 153:          }
 154:   
 155:          ////////////////////////////////////////////////////////////////////////////
 156:   
 157:          /// <summary>
 158:          ///
 159:          /// </summary>
 160:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessIdToMduDevDictionary()
 161:          {
 162:              accessIdToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 163:   
 164:              foreach (var mduDev in Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList)
 165:              {
 166:                  if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.AccessId) && !string.IsNullOrEmpty(mduDev.NddOntId))
 167:                  {
 168:                      if (!accessIdToMduDevDictionary.ContainsKey(mduDev.AccessId))
 169:                      {
 170:                          accessIdToMduDevDictionary[mduDev.AccessId] = mduDev;
 171:                      }
 172:                      else
 173:                      {
 174:   
 175:                      }
 176:                  }
 177:                  else
 178:                  {
 179:   
 180:                  }
 181:              }
 182:   
 183:              return accessIdToMduDevDictionary;
 184:          }
 185:   
 186:          ////////////////////////////////////////////////////////////////////////////
 187:   
 188:          /// <summary>
 189:          ///
 190:          /// </summary>
 191:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessId(string accessId)
 192:          {
 193:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 194:   
 195:              var accessIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.AccessIdToMduDevDictionary;
 196:   
 197:              if (accessIdToMduDevDictionary.ContainsKey(accessId))
 198:              {
 199:                  mduDev = accessIdToMduDevDictionary[accessId];
 200:              }
 201:              else mduDev = null;
 202:   
 203:              return mduDev;
 204:          }
 205:   
 206:          ////////////////////////////////////////////////////////////////////////////
 207:   
 208:          /// <summary>
 209:          ///
 210:          /// </summary>
 211:          public static int MduDevPortByAccessIdFnSnPn(string accessId, int fn, int sn, int pn)
 212:          {
 213:              var mduDev = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevByAccessId(accessId);
 214:   
 215:              var port = (mduDev != null) ? mduDev.PortByFnSnPn(fn, sn, pn) : Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
 216:   
 217:              return port;
 218:          }
 219:   
 220:          ////////////////////////////////////////////////////////////////////////////
 221:          ////////////////////////////////////////////////////////////////////////////
 222:   
 223:          /// <summary>
 224:          ///
 225:          /// </summary>
 226:          public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> NddOntIdToMduDevDictionary
 227:          {
 228:              get
 229:              {
 230:                  if (nddOntIdToMduDevDictionary == null || nddOntIdToMduDevDictionary.Count == 0)
 231:                  {
 232:                      lock (objectLock)
 233:                      {
 234:                          nddOntIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._NddOntIdToMduDevDictionary();
 235:                      }
 236:                  }
 237:   
 238:                  return nddOntIdToMduDevDictionary;
 239:              }
 240:          }
 241:   
 242:          ////////////////////////////////////////////////////////////////////////////
 243:   
 244:          /// <summary>
 245:          ///
 246:          /// </summary>
 247:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _NddOntIdToMduDevDictionary()
 248:          {
 249:              nddOntIdToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 250:   
 251:              foreach (var mduDev in Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList)
 252:              {
 253:                  if (!string.IsNullOrEmpty(mduDev.NddOntId))
 254:                  {
 255:                      if (!nddOntIdToMduDevDictionary.ContainsKey(mduDev.NddOntId))
 256:                      {
 257:                          nddOntIdToMduDevDictionary[mduDev.NddOntId] = mduDev;
 258:                      }
 259:                      else
 260:                      {
 261:   
 262:                      }
 263:                  }
 264:                  else
 265:                  {
 266:   
 267:                  }
 268:              }
 269:   
 270:              return nddOntIdToMduDevDictionary;
 271:          }
 272:   
 273:          ////////////////////////////////////////////////////////////////////////////
 274:   
 275:          /// <summary>
 276:          ///
 277:          /// </summary>
 278:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByNddOntId(string nddOntId)
 279:          {
 280:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 281:   
 282:              var nddOntIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.NddOntIdToMduDevDictionary;
 283:   
 284:              if (nddOntIdToMduDevDictionary.ContainsKey(nddOntId))
 285:              {
 286:                  mduDev = nddOntIdToMduDevDictionary[nddOntId];
 287:              }
 288:              else mduDev = null;
 289:   
 290:              return mduDev;
 291:          }
 292:   
 293:          ////////////////////////////////////////////////////////////////////////////
 294:          ////////////////////////////////////////////////////////////////////////////
 295:   
 296:          /// <summary>
 297:          ///
 298:          /// </summary>
 299:          public static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> DidToMduDevDictionary
 300:          {
 301:              get
 302:              {
 303:                  if (didToMduDevDictionary == null || didToMduDevDictionary.Count == 0)
 304:                  {
 305:                      lock (objectLock)
 306:                      {
 307:                          didToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._DidToMduDevDictionary();
 308:                      }
 309:                  }
 310:   
 311:                  return didToMduDevDictionary;
 312:              }
 313:          }
 314:   
 315:          ////////////////////////////////////////////////////////////////////////////
 316:   
 317:          /// <summary>
 318:          ///
 319:          /// </summary>
 320:          private static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _DidToMduDevDictionary()
 321:          {
 322:              didToMduDevDictionary = new Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 323:   
 324:              foreach (var mduDev in Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList)
 325:              {
 326:                  if (mduDev.Did > -1)
 327:                  {
 328:                      if (!didToMduDevDictionary.ContainsKey(mduDev.Did))
 329:                      {
 330:                          didToMduDevDictionary[mduDev.Did] = mduDev;
 331:                      }
 332:                      else
 333:                      {
 334:   
 335:                      }
 336:                  }
 337:                  else
 338:                  {
 339:   
 340:                  }
 341:              }
 342:   
 343:              return didToMduDevDictionary;
 344:          }
 345:   
 346:          ////////////////////////////////////////////////////////////////////////////
 347:   
 348:          /// <summary>
 349:          ///
 350:          /// </summary>
 351:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByDid(int did)
 352:          {
 353:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 354:   
 355:              var didToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.DidToMduDevDictionary;
 356:   
 357:              if (didToMduDevDictionary.ContainsKey(did))
 358:              {
 359:                  mduDev = didToMduDevDictionary[did];
 360:              }
 361:              else mduDev = null;
 362:   
 363:              return mduDev;
 364:          }
 365:   
 366:          ////////////////////////////////////////////////////////////////////////////
 367:          ////////////////////////////////////////////////////////////////////////////
 368:   
 369:          /// <summary>
 370:          ///
 371:          /// </summary>
 372:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard> MduDevBoardList
 373:          {
 374:              get
 375:              {
 376:                  if (mduDevBoardList == null || mduDevBoardList.Count == 0)
 377:                  {
 378:                      lock (objectLock)
 379:                      {
 380:                          mduDevBoardList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
 381:   
 382:                          var boardList = Ia.Ngn.Cl.Model.Data.Huawei.Default.BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType();
 383:   
 384:                          foreach (var board in boardList)
 385:                          {
 386:                              var mduDevBoard = new Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard(board.DID, board.BT, board.BNAME, board.BVER, board.EmsDev.Type, board.EmsDev.DEVIP, board.FN, board.SN);
 387:   
 388:                              mduDevBoardList.Add(mduDevBoard);
 389:                          }
 390:                      }
 391:                  }
 392:   
 393:                  return mduDevBoardList;
 394:              }
 395:          }
 396:   
 397:          ////////////////////////////////////////////////////////////////////////////
 398:   
 399:          /// <summary>
 400:          ///
 401:          /// </summary>
 402:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> MduDevList
 403:          {
 404:              get
 405:              {
 406:                  if (mduDevList == null || mduDevList.Count == 0)
 407:                  {
 408:                      lock (objectLock)
 409:                      {
 410:                          mduDevList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 411:   
 412:                          foreach (var mduDevBoard in Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevBoardList)
 413:                          {
 414:                              var did = mduDevBoard.Did;
 415:   
 416:                              var mduDev = (from m in mduDevList where m.Did == did select m).SingleOrDefault();
 417:   
 418:                              if (mduDev != null)
 419:                              {
 420:                                  mduDev.MduDevBoardList.Add(mduDevBoard);
 421:                              }
 422:                              else
 423:                              {
 424:                                  mduDev = new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev(did)
 425:                                  {
 426:                                      DevType = mduDevBoard.EmsDevType,
 427:                                      DevIp = mduDevBoard.EmsDevIp,
 428:                                  };
 429:   
 430:                                  mduDev.MduDevBoardList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
 431:                                  mduDev.MduDevBoardList.Add(mduDevBoard);
 432:   
 433:                                  mduDevList.Add(mduDev);
 434:                              }
 435:                          }
 436:   
 437:                          foreach (var mduDev in mduDevList)
 438:                          {
 439:                              mduDev.TelPortCount = mduDev.MduDevBoardList.Select(i => i.TelPortCount).Sum();
 440:                              mduDev.EthernetPortCount = mduDev.MduDevBoardList.Select(i => i.EthernetPortCount).Sum();
 441:   
 442:                              mduDev.PossibleFnSnPnPortList = Ia.Ngn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMduDevList(mduDev);
 443:                              mduDev.FirstFnSnPnPort = Ia.Ngn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMduDevList(mduDev);
 444:                          }
 445:                      }
 446:                  }
 447:   
 448:                  return mduDevList;
 449:              }
 450:          }
 451:   
 452:          ////////////////////////////////////////////////////////////////////////////
 453:   
 454:          /// <summary>
 455:          ///
 456:          /// </summary>
 457:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev> MsanDevList
 458:          {
 459:              get
 460:              {
 461:                  if (msanDevList == null || msanDevList.Count == 0)
 462:                  {
 463:                      lock (objectLock)
 464:                      {
 465:                          int did;
 466:                          Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
 467:   
 468:                          msanDevList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev>();
 469:   
 470:                          foreach (var dev in Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevList())
 471:                          {
 472:                              //if (dev.DEV == "SLM_MSAN_A01_F00");
 473:                              //else
 474:                              //{
 475:                              did = dev.DID;
 476:   
 477:                              msanDev = new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev(did);
 478:   
 479:                              if (!string.IsNullOrEmpty(msanDev.Id)) msanDevList.Add(msanDev);
 480:                              //}
 481:                          }
 482:   
 483:                          foreach (var msanDev0 in msanDevList)
 484:                          {
 485:                              msanDev0.PossibleFnSnPnList = Ia.Ngn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMsanDevList();
 486:                              msanDev0.FirstFnSnPn = Ia.Ngn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMsanDevList();
 487:                          }
 488:                      }
 489:                  }
 490:   
 491:                  return msanDevList;
 492:              }
 493:          }
 494:   
 495:          ////////////////////////////////////////////////////////////////////////////
 496:   
 497:          /// <summary>
 498:          ///
 499:          /// </summary>
 500:          public static Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, int> MsanSiteToServiceCountDictionary()
 501:          {
 502:              int count;
 503:              Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site site;
 504:              List<int> didList;
 505:   
 506:              var msanDevDidToDnCountDictionary = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
 507:   
 508:              var msanSiteToDidListDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
 509:   
 510:              var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, int>();
 511:   
 512:              foreach (KeyValuePair<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, List<int>> kvp in msanSiteToDidListDictionary)
 513:              {
 514:                  site = kvp.Key;
 515:                  didList = kvp.Value;
 516:   
 517:                  foreach (int did in didList)
 518:                  {
 519:                      count = msanDevDidToDnCountDictionary.ContainsKey(did) ? msanDevDidToDnCountDictionary[did] : 0;
 520:   
 521:                      if (!dictionary.ContainsKey(site)) dictionary[site] = count;
 522:                      else dictionary[site] += count;
 523:                  }
 524:              }
 525:   
 526:              return dictionary;
 527:          }
 528:   
 529:          ////////////////////////////////////////////////////////////////////////////
 530:   
 531:          /// <summary>
 532:          ///
 533:          /// </summary>
 534:          public static Dictionary<string, int> MsanDevDevToDnCountDictionary
 535:          {
 536:              get
 537:              {
 538:                  var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
 539:   
 540:                  var msanDevDidToDnCountDictionary = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
 541:   
 542:                  var dictionary = new Dictionary<string, int>();
 543:   
 544:                  foreach (var msanDev in msanDevList)
 545:                  {
 546:                      dictionary[msanDev.Dev] = msanDevDidToDnCountDictionary.ContainsKey(msanDev.Did) ? msanDevDidToDnCountDictionary[msanDev.Did] : 0;
 547:                  }
 548:   
 549:                  return dictionary;
 550:              }
 551:          }
 552:   
 553:          ////////////////////////////////////////////////////////////////////////////
 554:   
 555:          /// <summary>
 556:          ///
 557:          /// </summary>
 558:          public static List<string> MsanServiceListBySiteId(int siteId)
 559:          {
 560:              var msanSiteToDidListDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
 561:   
 562:              var didList = (from l in msanSiteToDidListDictionary
 563:                             where l.Key.Id == siteId
 564:                             select l.Value).SingleOrDefault();
 565:   
 566:              if (didList == null) didList = new List<int>();
 567:   
 568:              var dnServiceList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.DnServiceListByMsanDevDidList(didList);
 569:   
 570:              return dnServiceList;
 571:          }
 572:   
 573:          ////////////////////////////////////////////////////////////////////////////
 574:   
 575:          /// <summary>
 576:          ///
 577:          /// </summary>
 578:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsan(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
 579:          {
 580:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
 581:          }
 582:   
 583:          ////////////////////////////////////////////////////////////////////////////
 584:   
 585:          /// <summary>
 586:          ///
 587:          /// </summary>
 588:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinet(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet)
 589:          {
 590:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinet(msan, cabinet);
 591:          }
 592:   
 593:          ////////////////////////////////////////////////////////////////////////////
 594:   
 595:          /// <summary>
 596:          ///
 597:          /// </summary>
 598:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrame(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame)
 599:          {
 600:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrame(msan, cabinet, frame);
 601:          }
 602:   
 603:          ////////////////////////////////////////////////////////////////////////////
 604:   
 605:          /// <summary>
 606:          ///
 607:          /// </summary>
 608:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn)
 609:          {
 610:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(msan, cabinet, frame, fn);
 611:          }
 612:   
 613:          ////////////////////////////////////////////////////////////////////////////
 614:   
 615:          /// <summary>
 616:          ///
 617:          /// </summary>
 618:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn)
 619:          {
 620:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(msan, cabinet, frame, fn, sn);
 621:          }
 622:   
 623:          ////////////////////////////////////////////////////////////////////////////
 624:   
 625:          /// <summary>
 626:          ///
 627:          /// </summary>
 628:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByEmsVoipPstnUserId(string emsVoipPstnUserId)
 629:          {
 630:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUserId);
 631:          }
 632:   
 633:          ////////////////////////////////////////////////////////////////////////////
 634:   
 635:          /// <summary>
 636:          ///
 637:          /// </summary>
 638:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn, int pn)
 639:          {
 640:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(msan, cabinet, frame, fn, sn, pn);
 641:          }
 642:   
 643:          ////////////////////////////////////////////////////////////////////////////
 644:   
 645:          /// <summary>
 646:          ///
 647:          /// </summary>
 648:          public static Dictionary<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string> MsanDevLicToServiceByMsanDictionary(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
 649:          {
 650:              var msanDevLicList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
 651:   
 652:              var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string>();
 653:   
 654:              foreach (var msanDevLic in msanDevLicList)
 655:              {
 656:                  dictionary[msanDevLic] = msanDevLic.Service;
 657:              }
 658:   
 659:              return dictionary;
 660:          }
 661:   
 662:          ////////////////////////////////////////////////////////////////////////////
 663:   
 664:          /// <summary>
 665:          ///
 666:          /// </summary>
 667:          public static Dictionary<string, string> MsanDevLicCabinetFrameSnPnTextStringToServiceByMsanDictionary(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
 668:          {
 669:              string cabinetFrameSnPnTextString;
 670:   
 671:              var msanDevLicList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
 672:   
 673:              var dictionary = new Dictionary<string, string>();
 674:   
 675:              foreach (var msanDevLic in msanDevLicList)
 676:              {
 677:                  cabinetFrameSnPnTextString = msanDevLic.ToCabinetFrameSnPnTextString();
 678:   
 679:                  dictionary[cabinetFrameSnPnTextString] = msanDevLic.Service;
 680:              }
 681:   
 682:              return dictionary;
 683:          }
 684:   
 685:          ////////////////////////////////////////////////////////////////////////////
 686:   
 687:          /// <summary>
 688:          ///
 689:          /// </summary>
 690:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsBoard> BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType()
 691:          {
 692:              List<Ia.Ngn.Cl.Model.Huawei.EmsBoard> list;
 693:   
 694:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 695:              {
 696:                  list = (from ed in db.EmsDevs
 697:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 698:                          where (ed.DT == "MA5616" || ed.DT == "MA5878") && (eb.BT == "PSTN" || eb.BT == "ETH")
 699:                          select eb).Include(u => u.EmsDev).ToList();
 700:   
 701:                  /*
 702:  select distinct * from EmsDevs ed
 703:  left outer join EmsBoards eb on ed.Id = eb.EmsDev_Id
 704:  where (ed.DT = 'MA5616' or ed.DT = 'MA5878') and (eb.BT = 'PSTN' or eb.BT = 'ETH')
 705:  order by ed.DT, ed.DEV 
 706:                  */
 707:              }
 708:   
 709:              return list;
 710:          }
 711:   
 712:          ////////////////////////////////////////////////////////////////////////////
 713:   
 714:          /// <summary>
 715:          ///
 716:          /// </summary>
 717:          public static List<Ia.Ngn.Cl.Model.Access> AccessListBy5616Or5878OntEquipmentId()
 718:          {
 719:              List<Ia.Ngn.Cl.Model.Access> list;
 720:   
 721:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 722:              {
 723:                  list = (from a in db.Accesses
 724:                          join eo in db.EmsOnts on a equals eo.Access
 725:                          join ed in db.EmsDevs on eo.NAME equals ed.DEVIP into gj
 726:                          from sgj in gj.DefaultIfEmpty()
 727:                          where eo.EQUIPMENTID == "5616" || eo.EQUIPMENTID == "5878"
 728:                          select a).ToList(); //.Include(u => u.EmsDev).ToList();
 729:                  /*
 730:                  select a.Id, eo.NAME, eo.ALIAS, eo.EQUIPMENTID, ed.DEVIP, ed.DEV from Accesses a
 731:                  inner join EmsOnts eo on a.Id = eo.Access_Id
 732:                  left outer join EmsDevs ed on ed.DEVIP = eo.NAME 
 733:                  where eo.EQUIPMENTID = '5616' or eo.EQUIPMENTID = '5878'
 734:                  */
 735:              }
 736:   
 737:              return list;
 738:          }
 739:   
 740:          ////////////////////////////////////////////////////////////////////////////
 741:   
 742:          /// <summary>
 743:          ///
 744:          /// </summary>
 745:          public static List<string> MsanPortIdList()
 746:          {
 747:              List<string> list;
 748:   
 749:              //var possibleSnList = Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.PossibleSnList; or just check if EmsBoard.BT = "PSTN"
 750:   
 751:              //  var dev = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevDidList();
 752:   
 753:              // The EmsPort list is about 230K big. I can't LINQ directly.
 754:   
 755:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 756:              {
 757:                  var emsDevDidDevList = (from ed in db.EmsDevs select new { ed.DID, ed.DEV }).ToList();
 758:   
 759:                  var emsMsanDevDidList = emsDevDidDevList.Where(u => u.DEV.Contains("_MSAN_")).Select(u => u.DID).ToList();
 760:   
 761:                  /*
 762:                   * too slow
 763:                  list = (from ed in db.EmsDevs
 764:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 765:                          join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
 766:                          where ed.DEV.Contains("_MSAN_") && eb.BT == "PSTN"
 767:                          select ep).ToList();
 768:                  */
 769:   
 770:                  /*
 771:                   * too slow
 772:                  list = (from ed in db.EmsDevs
 773:                          where emsMsanDevDidList.Contains(ed.DID)
 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:                          select ep).ToList();
 777:                  */
 778:   
 779:                  var portIdDidList = (from ep in db.EmsPorts select new { ep.Id, ep.DID }).ToList();
 780:   
 781:                  list = (from ep in portIdDidList where emsMsanDevDidList.Contains(ep.DID) select ep.Id).ToList();
 782:              }
 783:   
 784:              return list;
 785:          }
 786:   
 787:          ////////////////////////////////////////////////////////////////////////////
 788:   
 789:          /// <summary>
 790:          ///
 791:          /// </summary>
 792:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsPort> MsanPortList(Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev)
 793:          {
 794:              List<Ia.Ngn.Cl.Model.Huawei.EmsPort> list;
 795:   
 796:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 797:              {
 798:                  list = (from ed in db.EmsDevs
 799:                          where ed.DID == msanDev.Did
 800:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 801:                          join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
 802:                          select ep).Include(ep => ep.EmsBoard).Include(ep => ep.EmsBoard.EmsDev).AsNoTracking().ToList();
 803:              }
 804:   
 805:              return list;
 806:          }
 807:   
 808:          ////////////////////////////////////////////////////////////////////////////
 809:   
 810:          /// <summary>
 811:          ///
 812:          /// </summary>
 813:          public static List<string> DuplicateEmsOntSipInfoSipUserNameAndEmsVoipPstnUserMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList()
 814:          {
 815:              var list0 = Ia.Ngn.Cl.Model.Data.Huawei.OntSipInfo.DuplicateSipUserNameServiceList();
 816:              var list1 = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.DuplicateMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList();
 817:   
 818:              var list = list0.Union(list1).Distinct().ToList();
 819:   
 820:              return list;
 821:          }
 822:   
 823:          ////////////////////////////////////////////////////////////////////////////
 824:   
 825:          /// <summary>
 826:          ///
 827:          /// </summary>
 828:          public static void UnrecognizedEmsDevAndEmsOntList(out List<string> unrecognizedDevList, out List<string> unrecognizedOntList)
 829:          {
 830:              string name;
 831:              unrecognizedDevList = new List<string>();
 832:              unrecognizedOntList = new List<string>();
 833:   
 834:              var devList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevList();
 835:              var msanDevDevList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevDevList();
 836:              var nddOltList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList;
 837:   
 838:              foreach (var dev in devList)
 839:              {
 840:                  name = Ia.Ngn.Cl.Model.Business.Huawei.Ems.HuaweiAccessNameFormatFromInaccurateHuaweiFileAndEmsNameFormat(dev);
 841:                  name = Ia.Ngn.Cl.Model.Business.Default.StandardizeAccessNameInLegalFormatFromValue(name);
 842:   
 843:                  if (string.IsNullOrEmpty(name))
 844:                  {
 845:                      if (msanDevDevList.Contains(dev))
 846:                      {
 847:                      }
 848:                      else
 849:                      {
 850:                          if (nddOltList.Any(u => u.EmsName == dev))
 851:                          {
 852:                          }
 853:                          else
 854:                          {
 855:                              unrecognizedDevList.Add(dev);
 856:                          }
 857:                      }
 858:                  }
 859:              }
 860:   
 861:              var emsOntNullAccessList = Ia.Ngn.Cl.Model.Data.Huawei.Ont.ListWithNullAccess();
 862:   
 863:              foreach (var o in emsOntNullAccessList)
 864:              {
 865:                  unrecognizedOntList.Add(o.ALIAS + ":" + o.NAME);
 866:              }
 867:          }
 868:   
 869:          ////////////////////////////////////////////////////////////////////////////
 870:   
 871:          /// <summary>
 872:          ///
 873:          /// </summary>
 874:          public static string[] ListOfHuaweiOntThatWereIntiallyInstalledAndProvisionedWithNokiaMgcIp10_16_5_37BeforeNewMgcIpToCableDistributionAgreement
 875:          {
 876:              get
 877:              {
 878:                  if (list == null || list.Length == 0)
 879:                  {
 880:                      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",
 881:                          "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",
 882:                          "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",
 883:                          "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",
 884:                          "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",
 885:                          "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",
 886:                          "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",
 887:                          "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"
 888:                      };
 889:                  }
 890:   
 891:                  return list;
 892:              }
 893:          }
 894:   
 895:          ////////////////////////////////////////////////////////////////////////////
 896:          ////////////////////////////////////////////////////////////////////////////   
 897:      }
 898:   
 899:      ////////////////////////////////////////////////////////////////////////////
 900:      ////////////////////////////////////////////////////////////////////////////   
 901:  }