diff --git a/.gitignore b/.gitignore index 628cb20..a20656a 100755 --- a/.gitignore +++ b/.gitignore @@ -224,5 +224,10 @@ temp/ nrtestsuite/ tests/data/ -#Cmake generated export headers +#Cmake stuff +buildprod*/ *_export.h + + +# git merge +*.orig diff --git a/CMakeLists.txt b/CMakeLists.txt index 2756b71..268f55e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,8 +69,8 @@ ENDIF (MSVC) # configure file groups -file(GLOB EPANET_SOURCES src/*.c) -file(GLOB EPANET_LIB_ALL src/*.c src/*.h) +file(GLOB EPANET_SOURCES src/*.c src/util/*.c) +file(GLOB EPANET_LIB_ALL src/* src/util/*) source_group("Library" FILES ${EPANET_LIB_ALL}) diff --git a/ReleaseNotes2_1.md b/ReleaseNotes2_1.md index ae8f0e5..2ffd6fe 100644 --- a/ReleaseNotes2_1.md +++ b/ReleaseNotes2_1.md @@ -80,14 +80,15 @@ Contributors to this version (listed in order of first contribution): ``` ENopenH(); + ENopenQ(); ENinitH(0); ENinitQ(EN_NOSAVE); do { ENrunH(&t); ENrunQ(&qt); - ENnextQ(&qstep); // collect results ENnextH(&tstep); + ENnextQ(&qstep); } while (tstep > 0); ENcloseQ(); ENcloseH(); diff --git a/ReleaseNotes2_2.md b/ReleaseNotes2_2.md index 19d42eb..df1e9c0 100644 --- a/ReleaseNotes2_2.md +++ b/ReleaseNotes2_2.md @@ -109,8 +109,8 @@ int ENgetdemandmodel(int *modelType, double *pMin, double *pReq, double *pExp); ``` for the legacy API and ``` -int EN_setdemandmodel(EN_Project *pr, int modelType, double pMin, double pReq, double pExp); -int EN_getdemandmodel(EN_Project *pr, int *modelType, double *pMin, double *pReq, double *pExp); +int EN_setdemandmodel(EN_Project ph, int modelType, double pMin, double pReq, double pExp); +int EN_getdemandmodel(EN_Project ph, int *modelType, double *pMin, double *pReq, double *pExp); ``` for the thread-safe API. Some additional points regarding the new **PDA** option are: diff --git a/doc/DataFlow.eps b/doc/DataFlow.eps index febe439..041b043 100644 --- a/doc/DataFlow.eps +++ b/doc/DataFlow.eps @@ -1,7 +1,7 @@ %!PS-Adobe-3.0 EPSF-3.0 %%Creator: (ImageMagick) -%%Title: (/srv/www/vhosts/git_exclude/save/processed/f/e/b/feb24f93-0578-4fbd-bacd-cea373ca6d55/01_974b6e74f4a6ddd6b9fc94889edcc782_png_intermediate_eps/DataFlow3.eps) -%%CreationDate: (2019-01-23T17:53:26+01:00) +%%Title: (/srv/www/vhosts/git_exclude/save/processed/5/f/7/5f73a081-3008-4947-be6b-2ae45f4afa5d/01_0631f921834777aef3d754c155093225_png_intermediate_eps/DataFlow.eps) +%%CreationDate: (2019-01-27T17:06:23+01:00) %%BoundingBox: -0 -0 393 292 %%HiResBoundingBox: 0 0 393.041 292 %%DocumentData: Clean7Bit @@ -7292,8 +7292,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619E3770B6 407ECA64C1F7FFEBE5647ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC7 -3D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFEFEFEFEFEFE -FDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFF @@ -7333,7 +7333,7 @@ EAEAEA97A4B530619E3770B63A74BD3B77C03D79C43F7CC7407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFD -FEFEFEFEFEFEFCFCFCDBDBDB4646460000005E5E5EFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F080808757575 @@ -7373,8 +7373,8 @@ C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBE5647ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A -4C5F76EAEAEAF8F8F8FCFCFCFCFCFCEAEAEA737373070707000000000000070707F6F6F6FCFCFC -FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA B7B7B7000000000000000000171717929292FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE @@ -7413,8 +7413,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B63A74BD FFFFF7A694CA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C1 -3A74BB3871B7366DB22E5E9A4C5F76E9E9E9F6F6F6F9F9F9929292161616000000000000000000 -000000858585EFEFEFF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF7F7F7EBEBEB454545000000000000000000000000353535C2C2C2FBFBFB @@ -7453,8 +7453,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA 407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA -407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E994C5F76E6E6E6BCBCBC2D2D2D000000 -000000000000000000313131A9A9A9D8D8D8EAEAEAF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E5E5E5D3D3D3888888181818000000 @@ -7493,8 +7493,8 @@ FFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B53A74BC3B77BF3D79C33F7CC7407EC9407EC9 407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 -407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74BA3871B6366DB02D5D97435468 -4D4D4D0000000000000000000000001818187F7F7FBCBCBCC7C7C7D9D9D9EAEAEAF6F6F6FBFBFB +407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74B93871B5366CB02E5D984B5E75 +E7E7E7F5F5F5FAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAF3F3F3E6E6E6 @@ -7533,8 +7533,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B53A74BC3B76BF 407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 -407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74B9 -3870B53368A9162D49020303000000000000000000000000000000000000000000000000000000 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78BF3973B8 +1B3759000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -7574,7 +7574,7 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFED857DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 -3F7DC93F7BC63C77C03A72B92F609C050A10000000000000000000000000000000000000000000 +3F7DC93F7BC63C76BE3870B51A3556000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -7614,7 +7614,7 @@ FDFDFDF8F8F8EAEAEA96A4B52F609D366FB53974BC3A75BF3C78C33E7BC63F7DC93F7DC93F7DC9 85D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A694C93F7DC93F7DC93F7DC93F7DC9 3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 -3F7DC93F7DC93F7DC93F7DC93F7DC93E7BC63B77BF3871B7356BAE2750820A1420000000000000 +3F7DC93F7DC93F7DC93F7DC93F7DC93E7BC53A75BD366DB1183251000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -7654,9 +7654,9 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609D366FB53974BC3A75BE3C78C2 3F7DC93F7DC93F7DC93F7DDBC4FFFFE1C1D33F7DC93FAAEDFFFFED857DC93F7DC964C1F6FFD5DB 3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 -3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93E7BC53B77BE3870B63469AA -2F5F9B254C7B252E390F0F0F000000000000000000000000444444A3A3A3B4B4B4B8B8B8BABABA -BBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93E7BC43A74BB356BAE30629E +2A568E234774384657ADADADB7B7B7BBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BBBBBBBBBBBBBBBBBBBABABAB7B7B7B3B3B38C8C8C2A2A2A0000000000000000000000002D2D2D @@ -7695,8 +7695,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C 857DC83F7DC83F94E4E1FFED857DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 -3E7BC53B77BD3871B5346AAB2F609D264D7D3947589E9E9E525252050505000000000000000000 -0B0B0B676767BCBCBCBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +3E7BC43A75BA366CAE30629F2B59902449763A4859B1B1B1BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F000000000000000000 @@ -7735,8 +7735,8 @@ F8F8F8EAEAEA96A4B52F609C366FB43974BB3A75BE3C78C23E7BC53F7DC83F7DC83F7DC83F7DC8 C4AAC83F7DC83F7DDBC4FFF6A694C83F7DC83FAAEDFFFFED857DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 -3F7DC83F7DC83F7DC83F7DC83E7BC53B77BD3872B7356CAF3164A42852863E4E60B2B2B2B1B1B1 -969696343434000000000000000000000000202020A9A9A9D4D4D4D6D6D6D6D6D6D7D7D7D7D7D7 +3F7DC83F7DC83F7DC83F7DC83E7BC43A76BC376EB23367A72F5F9B275082405063C5C5C5D1D1D1 +D5D5D5D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D5D5D5D3D3D38080800C0C0C @@ -7775,9 +7775,9 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C366FB43974BB3A75BE3C78C23E7BC5 3F7DC83F7DC83F7DC885D5FFFFD5DB3F7DC83F7DD2A6EAFFFFFFFFFFFFFFFFFFFFFFD5DB3F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 -3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC53B77BE3973B8366FB33369AA -2B588F445569C7C7C7C5C5C5BEBEBEB4B4B48383831B1B1B000000000000000000151515E5E5E5 -EAEAEAECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC53B76BD3871B5356CAF3266A6 +2B578E47586DD9D9D9E6E6E6EBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECEC E9E9E9B8B8B80000000000000000000000003737379A9A9AB7B7B7C2C2C2CFCFCFDDDDDDE9E9E9 @@ -7816,8 +7816,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C366FB4 FFFFFFFFFFED857DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC5 -3B77BE3973B93770B4356BAF2D5B95495B70D9D9D9DCDCDCD3D3D3C8C8C8BDBDBDB6B6B6666666 -0C0C0C000000292929EAEAEAF4F4F4F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +3B77BE3973B8366FB3346AAD2D5B954A5D72E4E4E4F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F7F7F7F2F2F2CACACA0707070000001D1D1D838383B7B7B7C0C0C0CCCCCC @@ -7856,8 +7856,8 @@ EAEAEA96A4B42F609B366FB33974BA3A75BD3C78C03E7BC43F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 -3F7DC73F7DC73F7DC73E7BC43B77BE3973B83770B4356CAE2E5D964B5E74E4E4E4EBEBEBE8E8E8 -DFDFDFD2D2D2C6C6C6BEBEBEB1B1B1949494CACACAEAEAEAF7F7F7FCFCFCFEFEFEFEFEFEFEFEFE +3F7DC73F7DC73F7DC73E7BC43B77BE3973B83770B3356CAE2E5D964C5F75E9E9E9F7F7F7FCFCFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8929292BDBDBD @@ -7897,8 +7897,8 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42F609B366FB33974BA3A75BD3C78C03E7BC43F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73E7BC43B77BD3973B83770B4356CAF2E5D97 -4C5F75E8E8E8F4F4F4F5F5F5F0F0F0E7E7E7DCDCDCD1D1D1CBCBCBCECECEDBDBDBECECECF8F8F8 -FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +4C5F75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5F5F5 E8E8E8D7D7D7CCCCCCCCCCCCD4D4D4DFDFDFEAEAEAF2F2F2F8F8F8FCFCFCFEFEFEFEFEFEFEFEFE @@ -7937,8 +7937,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E609B366EB33873BA 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73D7AC43B76BD -3972B8376FB4356CAF2D5D974C5F75EAEAEAF7F7F7FBFBFBFAFAFAF5F5F5EFEFEFE6E6E6E0E0E0 -E0E0E0E8E8E8F2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3972B8376FB4356CAF2D5D974C5F75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E5E5E5E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7FBFBFBFDFDFD @@ -7977,8 +7977,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA FFFFFFFFFFFFFFFFFFFFFFFFE1C0D03E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 -3E7CC73E7CC73D79C43A75BD3872B8366FB4346BAF2D5D974C5E75EAEAEAF8F8F8FDFDFDFEFEFE -FCFCFCF9F9F9F5F5F5F2F2F2F1F1F1F5F5F5F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3E7CC73E7CC73D79C43A75BD3872B8366FB4346BAF2D5D974C5E75EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1F3F3F3F7F7F7 @@ -8018,7 +8018,7 @@ FFD5DA3E7CC73E7CC73E7CC73E7CC73E7CC73E7CD0A5EAFFFFFFF6A593C73E7CC73E7CC73E7CC7 3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73D79C33A75BD3872B8366FB4346BAF2D5D974C5E75 -EAEAEAF8F8F8FDFDFDFFFFFFFEFEFEFEFEFEFCFCFCFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFF +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD @@ -8058,8 +8058,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F9A356EB23873B93974BC FFD5D93E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63D79C23A75BC3872B7 -366FB3346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE -FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +366FB3346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF @@ -10235,7 +10235,7 @@ A4E9FFE1BDC83B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC 3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC 3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC 3B75BC3B75BC3B75BC3B75BC3B75BC3A73B9386FB3366CAE3469AA3165A52B578F4B5C72EAEAEA -F8F8F8FDFDFDFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF @@ -10275,8 +10275,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B5 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A9 -3165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFEFEFEFEFEFEFCFCFCDBDBDB4646460000005E5E5E -FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F080808757575EBEBEBFDFDFDFEFEFE @@ -10315,8 +10315,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A92 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB -3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8FCFCFCFCFCFCEAEAEA737373 -070707000000000000070707F6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBBEBEBE000000000000 @@ -10355,8 +10355,8 @@ F8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B53A73B83B75BB3B75BB3B75BB3B75BB 82D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DE6075BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB -3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A42B578E4B5C71E9E9E9F6F6F6 -F9F9F9929292161616000000000000000000000000858585EFEFEFF9F9F9FEFEFEFFFFFFFFFFFF +3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD @@ -10396,8 +10396,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B53A73B8 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB 3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A4 -2B578D4B5C71E6E6E6BCBCBC2D2D2D000000000000000000000000313131A9A9A9D8D8D8EAEAEA -F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +2B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E6E6E6D3D3D3888888181818000000000000000000000000 @@ -10436,8 +10436,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A913268A7 3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93A73B7 -386FB2366CAD3469A83165A22A568B4252644D4D4D0000000000000000000000001818187F7F7F -BCBCBCC7C7C7D9D9D9EAEAEAF6F6F6FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +386FB2366CAC3469A73164A22B568C4A5B70E7E7E7F5F5F5FAFAFAFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAF4F4F4E6E6E6D4D4D4C4C4C4B4B4B4 @@ -10476,7 +10476,7 @@ EAEAEA95A2B12C5A913268A7356CAE376EB13870B43A73B73B75B93B75B93B75B93B75B93B75B9 3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 -3B75B93B75B93B75B93A73B7386FB2366CAC3468A72E609B142A43020303000000000000000000 +3B75B93B75B93B75B93A73B7386FB1356BAB193352000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -10516,7 +10516,7 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59913267A7346BAE366DB1376FB43972B73A74B9 5FBCF3FFFFFFFFFFFFFFFFFFE1BCC53A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 -3A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376EB2356AAC2C599004090F000000 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376DB13468A818314F000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -10556,8 +10556,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59913167A7346BAE 3A74B93A74B93A74B95FBCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D03A74B93A74B93A74B9 3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 -3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376EB1 -3469AA3164A1234A7809121E000000000000000000000000000000000000000000000000000000 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B6366CAF +3266A4172E4B000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -10597,8 +10597,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA FFFFF3A38DB93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 -3A74B93A74B93972B6376EB03468A830629E2A588F224671232C360F0F0F000000000000000000 -000000444444A3A3A3B4B4B4B8B8B8BABABABBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBCBCBC +3A74B93A74B93972B5366BAD3164A12C5B9226508220426B374454ADADADB7B7B7BBBBBBBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBBBBBBBBBBBBBBBBB @@ -10637,8 +10637,8 @@ FFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0376FB23972B63A74B83A74B8 3A74B83A74B83A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 -3A74B83A74B83A74B83A74B83A74B83A74B83972B6376EB03469A930629E2B5990224774374555 -9E9E9E5252520505050000000000000000000B0B0B676767BCBCBCBFBFBFC0C0C0C1C1C1C1C1C1 +3A74B83A74B83A74B83A74B83A74B83A74B83972B5366CAE3265A22D5B9327528521446D384656 +B1B1B1BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 @@ -10677,9 +10677,9 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0 3A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 -3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83972B6376EB0346AAA -3165A22D5D97254C7C3D4B5DB2B2B2B1B1B1969696343434000000000000000000000000202020 -A9A9A9D4D4D4D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83972B5366DAF3367A5 +2F609A2A588F244A793E4E5FC5C5C5D1D1D1D5D5D5D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D3D3D38080800C0C0C000000000000000000 @@ -10718,8 +10718,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B1 FFFFFFFFFFFFFFFFFFFFFFFFFFE9DC5F74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 -3A74B83972B6376EB1356BAB3267A52E619D285284425365C7C7C7C5C5C5BEBEBEB4B4B4838383 -1B1B1B000000000000000000151515E5E5E5EAEAEAECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +3A74B83972B6376DB03469A93164A12D5F99275183455669D9D9D9E6E6E6EBEBEBEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECE9E9E9BFBFBF000000 @@ -10758,8 +10758,8 @@ FDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0376FB23972B63A74B83A74B83A74B8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE78274B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 -3A74B83A74B83A74B83A74B83A74B83972B6376EB0356BAC3368A63063A129558947586CD9D9D9 -DCDCDCD3D3D3C8C8C8BDBDBDB6B6B66666660C0C0C000000292929EAEAEAF4F4F4F8F8F8F9F9F9 +3A74B83A74B83A74B83A74B83A74B83972B6376EB0356BAB3267A52F629F295589485A6EE4E4E4 +F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 @@ -10798,9 +10798,9 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B598F3167A5346BAC366DAF376FB1 3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 -3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73972B5376EB0356BAB3368A6 -3064A02A578B495B6FE4E4E4EBEBEBE8E8E8DFDFDFD2D2D2C6C6C6BEBEBEB1B1B1949494CACACA -EAEAEAF7F7F7FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73972B5376EB0356BAB3368A5 +3064A02A578B4A5C70E9E9E9F7F7F7FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8929292BDBDBDC0C0C0C9C9C9D6D6D6 @@ -10839,8 +10839,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B598F 3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 -3972B5376EAF356BAB3368A63064A12A578C4A5C70E8E8E8F4F4F4F5F5F5F0F0F0E7E7E7DCDCDC -D1D1D1CBCBCBCECECEDBDBDBECECECF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3972B5376EAF356BAB3368A63064A12A578C4A5C70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF6F6F6E8E8E8D7D7D7CCCCCC @@ -10879,8 +10879,8 @@ F8F8F8EAEAEA95A2B12A598F3166A5336AAC356CAF376EB13871B53973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 -3973B73973B73973B73973B73871B5366EAF346AAB3267A63063A129568C4A5C70EAEAEAF7F7F7 -FBFBFBFAFAFAF5F5F5EFEFEFE6E6E6E0E0E0E0E0E0E8E8E8F2F2F2FAFAFAFEFEFEFFFFFFFFFFFF +3973B73973B73973B73973B73871B5366EAF346AAB3267A63063A129568C4A5C70EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD @@ -10920,8 +10920,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588F3166A5336AAC356CAF366EB13871B5 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73871B5366DAF346AAB3267A62F63A1 -29568C4A5B70EAEAEAF8F8F8FDFDFDFEFEFEFCFCFCF9F9F9F5F5F5F2F2F2F1F1F1F5F5F5F9F9F9 -FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +29568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1F3F3F3F7F7F7FAFAFAFDFDFDFEFEFE @@ -10960,8 +10960,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588F3166A5 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73871B4 -366DAF346AAA3267A62F63A129568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFEFEFEFEFEFEFCFCFC -FBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +366DAF346AAA3267A62F63A129568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBFBFBFBFCFCFC @@ -11001,7 +11001,7 @@ EAEAEA95A2B12A588E3166A4336AAB356CAD366EB03871B43973B63973B63973B63973B63973B6 3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 3973B63973B63973B63871B4366DAE346AAA3267A52F63A029568B4A5B70EAEAEAF8F8F8FDFDFD -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF @@ -13423,7 +13423,7 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842D5E9830619E3164A13366A4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFF FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A89A331A1BE34A8C736ABCA37AECE39B1D13AB3D4 3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 @@ -13463,8 +13463,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE275184 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A88A2309FBD33A7C6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F +080808757575EBEBEBFDFDFDFEFEFEFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A88A2309FBD33A7C6 35AAC936ADCC38B0D039B2D239B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 @@ -13504,7 +13504,7 @@ FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +FEFEFEFBFBFBBEBEBE000000000000000000171717929292FBFBFBFCFCFCF9F9F9F1F1F1DCDCDC 9EB0B42987A1309EBC33A6C535A9C836ACCB38AFCF39B1D139B1D139B1D139B1D139B1D139B1D1 39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 @@ -13544,8 +13544,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842C5D982F619E3064A13266A43368A6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FEFEFEFAFAFAF1F1F1DCDCDC9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0 +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7EBEBEB4D4D4D0000000000000000000000002D2D2D +B9B9B9F6F6F6EFEFEFDBDBDB9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0 39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039CCF0FFFFF7A3BFD0 @@ -13584,8 +13584,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842C5D98 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB429869F2F9DBA32A4C234A7C5 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E6E6E6D3D3D3888888 +181818000000000000000000000000525252D5D5D5D9D9D99DAEB329869F2F9DBA32A4C234A7C5 35AAC937ADCC38AFCF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF 38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF 38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF @@ -13620,13 +13620,13 @@ EAEAEA94A0AE2751842C5D982F619E3063A13265A33368A6356AAA356AAA356AAA356AAA356AAA 356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA 356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA 356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA -356AAA356AAA356AAA3367A63164A12F619D2D5E982B5B94264F8049596CEAEAEAF8F8F8FDFDFD -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB4 -28859E2F9CB931A3C133A6C435A9C836ACCB38AECD38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +356AAA356AAA356AAA3367A63164A12F619D2D5E972B5B93264E7F48586BE8E8E8F5F5F5FAFAFA +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFA +F4F4F4E6E6E6D4D4D4C4C4C4B4B4B462626206060600000000000000000007070769696996A7AA +28849D2F9BB831A3C133A6C435A9C836ACCB38AECD38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE 38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE 38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE 38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFF7A2BDCE38AFCE38AFCE38CAEFFFFFFFE1D8D6 @@ -13660,13 +13660,13 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2750832C5D972F609D3063A03265A33367A53569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 -3569A93569A93569A93569A93569A93569A93569A93367A53163A02F609C2D5D972B5A93264E80 -49586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE -FAFAFAF1F1F1DCDCDC9EAFB428849D2E9BB831A2C032A5C334A8C636ABCA37ADCC37ADCC37ADCC +3569A93569A93569A93569A93569A93569A93569A93367A53163A02F609B2C5C95152C48000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000E10101A54642D99B531A1BF32A5C334A8C636ABCA37ADCC37ADCC37ADCC 37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC 37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC 37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36C9EEFFFFFFFFFFFFFFFFFF @@ -13701,12 +13701,12 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE2750832C5D972F609D 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93367A53163A0 -2F609C2D5D972B5A93264E8049586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB328839C2E9AB631A1BF32A4C234A7C5 +2F5F9B2C5A93142A45000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000C2A312E99B632A3C134A7C5 36AAC937ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB 37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB 37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB @@ -13741,13 +13741,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 -3569A93569A93367A53163A02F609C2D5D972B5A93264E8049586CEAEAEAF8F8F8FDFDFDFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB327829B -2D98B5309FBD31A2C133A5C435A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +3569A93569A93367A531639F2E5E9A2B588F132842000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000E2E37 +257F972E99B630A0BF33A4C335A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA 36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA 36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA 36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA36ABCA5DD6F7FFFFF7A2B9CA36ABCA @@ -13781,13 +13781,13 @@ FFFFFFFDFDFDF8F8F8EAEAEA949FAE2750832C5C972F609D3062A03265A33367A53569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 -3569A93569A93569A93569A93569A93569A93367A53163A02F609C2D5D972B5A93264E8049586C -EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA -F1F1F1DCDCDC9EAFB327829A2D98B4309FBC31A2BF33A4C335A7C636AAC936AAC936AAC936AAC9 +3569A93569A93569A93569A93569A93569A93367A531639F2E5E982A578D254E801E3E66374352 +ADADADB7B7B7BBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBBBBBBBBBBBBBBBBBBBABABAB7B7B7B3B3B38C8C8C2A2A2A000000000000000000 +000000222222616B6E206B7F2888A12E98B3309FBC33A3C235A7C636AAC936AAC936AAC936AAC9 36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936C8EDFFFFF6A2B9C936AAC936AAC9 @@ -13821,13 +13821,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE2650832C5C972E609D3062A0 3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 -3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93367A53163A02F609C -2D5D972B5A93254E8048586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB32781992D97B3309EBB31A1BE33A4C135A7C5 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93367A531639F2E5E99 +2A588E264F811E4069384454B2B2B2BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F000000 +0000000000000000000F0F0F6A6A6A9C9C9C79878A216C802989A22E97B3309FBC33A3C035A7C5 36A9C736AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836C8ED @@ -13862,13 +13862,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE 3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 -3469A93266A43063A02E609B2C5D972A5992254E7F48586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAEB32680982D96B2 -2F9DBA31A0BD32A3C034A6C435A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 +3469A93266A430639F2D5F992A59912752872145703E4B5CC5C5C5D1D1D1D5D5D5D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D3D3D3 +8080800C0C0C0000000000000000000505054F4F4FA7A7A7AFAFAFABABAB8491962272872A8DA8 +2E99B6319FBC32A3C034A6C435A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 35A8C635A8C635A8C635C6EDFFFFF6A1B8C635A8C635A8C635A8C65CD5F6FFFFFFC1C6C635A8C6 @@ -13902,13 +13902,13 @@ FDFDFDF8F8F8EAEAEA949FAD264F822C5C962E5F9C2F619F3164A13266A43468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 -3468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C962A5992254D7F48586BEAEAEA -F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 -DCDCDC9EAEB3267F972C95B12F9CB9309FBC32A2BF34A4C235A7C535A7C535A7C535A7C535A7C5 +3468A83468A83468A83468A83468A83265A430629F2E5E9A2B5A9329568D234978435264D9D9D9 +E6E6E6EBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +ECECECECECECE9E9E9BFBFBF0000000000000000000000003737379A9A9AB6B6B6BEBEBEC4C4C4 +BFBFBF909FA424798F2B91AD2F9BB8309EBB32A2BF34A4C235A7C535A7C535A7C535A7C535A7C5 35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 35A7C535A7C535A7C535A7C535A7C535A7C535A7C535C5ECFFFFF6A1B6C535A7C535A7C535A7C5 @@ -13942,13 +13942,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A1 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 -3468A83468A83468A83468A83468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C96 -2A5992254D7F48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAEB2267F962C95B02F9CB8309EBB32A1BE34A4C135A7C4 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C95 +2A5890244C7D475669E4E4E4F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F7F7F7F2F2F2D1D1D10707070000001D1D1D838383B7B7B7 +C0C0C0CBCBCBD5D5D5D8D8D8CECECE98A8AC257D942C94AF2F9BB7309EBB32A1BE34A4C135A7C4 35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 @@ -13983,12 +13983,12 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F82 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 -3265A430629F2E5F9B2C5C962A5992254D7F48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAEB2267E952C93AE2E9AB6 +3265A430629F2E5F9B2C5C962A5991254D7F48586BE9E9E9F7F7F7FCFCFCFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8 +929292BDBDBDC0C0C0C9C9C9D6D6D6E1E1E1E8E8E8E7E7E7D8D8D89CACB0267E942C93AE2E9AB6 309DB932A0BD33A3C035A5C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 @@ -14027,9 +14027,9 @@ F8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A13266A43468A83468A83468A83468A8 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC -9EAEB2257D942B92AD2E99B52F9CB8319FBB33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FCFCFCF6F6F6E8E8E8D7D7D7CCCCCCCCCCCCD4D4D4DFDFDFEAEAEAF1F1F1F3F3F3EEEEEEDBDBDB +9DADB1257D942B92AD2E99B52F9CB8319FBB33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2 34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 @@ -14068,8 +14068,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A13266A4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FEFEFEFAFAFAF1F1F1DCDCDC9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1 +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E6E6E6E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7 +FAFAFAF8F8F8F0F0F0DCDCDC9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1 34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 @@ -14108,8 +14108,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C95 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EADB2257B932B90AC2E97B42F9AB7 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1 +F3F3F3F7F7F7FAFAFAFDFDFDFDFDFDFAFAFAF1F1F1DCDCDC9EADB2257B932B90AC2E97B42F9AB7 319DBA339FBD34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 @@ -14149,7 +14149,7 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2 +FEFEFEFDFDFDFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2 257A922B8FAB2D96B32F98B6309BB9329EBC33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF 33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF 33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF @@ -14189,7 +14189,7 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F812B5B952E5F9B2F619E3163A03265A33467A6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE FAFAFAF1F1F1DCDCDC9DADB22479912A8EA92D95B12E97B5309AB8329DBB339FBE339FBE339FBE 339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE 339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE diff --git a/doc/DataFlow.png b/doc/DataFlow.png index 613b89e..a499f45 100644 Binary files a/doc/DataFlow.png and b/doc/DataFlow.png differ diff --git a/doc/toolkit-usage.dox b/doc/toolkit-usage.dox index 5ad1371..b6de2d2 100644 --- a/doc/toolkit-usage.dox +++ b/doc/toolkit-usage.dox @@ -88,7 +88,7 @@ void changeDiameters(EN_Project ph) for (i = 1; i <= nLinks; i++) { EN_getlinkvalue(ph, i, EN_DIAMETER, &diam); - if (diam == 10) ENsetlinkvalue(i, EN_DIAMETER, 12); + if (diam == 10) EN_setlinkvalue(ph, i, EN_DIAMETER, 12); } } \endcode diff --git a/include/epanet2_2.h b/include/epanet2_2.h index ae21a60..161f122 100644 --- a/include/epanet2_2.h +++ b/include/epanet2_2.h @@ -68,7 +68,7 @@ typedef struct Project *EN_Project; @brief Creates an EPANET project. @param[out] ph an EPANET project handle that is passed into all other API functions. @return an error code. - + EN_createproject must be called before any other API functions are used. */ int DLLEXPORT EN_createproject(EN_Project *ph); @@ -129,9 +129,9 @@ typedef struct Project *EN_Project; @param rptFile the name of a report file to be created (or "" if not needed). @param outFile the name of a binary output file to be created (or "" if not needed). @return an error code. - + This function should be called immediately after ::EN_createproject if an EPANET-formatted - input file will be used to supply network data. + input file will be used to supply network data. */ int DLLEXPORT EN_open(EN_Project ph, const char *inpFile, const char *rptFile, const char *outFile); @@ -163,19 +163,19 @@ typedef struct Project *EN_Project; /** @brief Runs a complete hydraulic simulation with results for all time periods - written to a temporary hydraulics file. + written to a temporary hydraulics file. @param ph an EPANET project handle. @return an error code. Use ::EN_solveH to generate a complete hydraulic solution which can stand alone - or be used as input to a water quality analysis. This function will not allow one to + or be used as input to a water quality analysis. This function will not allow one to examine intermediate hydraulic results as they are generated. It can also be followed by calls to ::EN_saveH and ::EN_report to write hydraulic results to the report file. - - The sequence ::EN_openH - ::EN_initH - ::EN_runH - ::EN_nextH - ::EN_closeH + + The sequence ::EN_openH - ::EN_initH - ::EN_runH - ::EN_nextH - ::EN_closeH can be used instead to gain access to results at intermediate time periods and directly adjust link status and control settings as a simulation proceeds. - + Example: \code {.c} EN_Project ph; @@ -211,7 +211,7 @@ typedef struct Project *EN_Project; Call ::EN_openH prior to running the first hydraulic analysis using the ::EN_initH - ::EN_runH - ::EN_nextH sequence. Multiple analyses can be made before calling ::EN_closeH to close the hydraulic solver. - + Do not call this function if ::EN_solveH is being used to run a complete hydraulic analysis or if hydraulics are being supplied by a previously saved hydraulics file using ::EN_usehydfile. @@ -219,14 +219,14 @@ typedef struct Project *EN_Project; int DLLEXPORT EN_openH(EN_Project ph); /** - @brief Initializes a network prior to running a hydraulic analysis. + @brief Initializes a network prior to running a hydraulic analysis. @param ph an EPANET project handle. @param initFlag a 2-digit initialization flag (see @ref EN_InitHydOption). @return an error code. This function initializes storage tank levels, link status and settings, and the simulation time clock prior to running a hydraulic analysis. - + The initialization flag is a two digit number where the 1st (left) digit indicates if link flows should be re-initialized (1) or not (0), and the 2nd digit indicates if hydraulic results should be saved to a temporary @@ -239,7 +239,7 @@ typedef struct Project *EN_Project; - making a subsequent water quality run, - using ::EN_report to generate a report - using ::EN_savehydfile to save the binary hydraulics file. - + There is no need to save hydraulics if you will be writing custom code to process hydraulic results as they are generated using the functions ::EN_getnodevalue and ::EN_getlinkvalue. @@ -257,7 +257,7 @@ typedef struct Project *EN_Project; should be treated as a read-only variable. ::EN_initH must have been called prior to running the ::EN_runH - ::EN_nextH loop. - + See ::EN_nextH for an example of using this function. */ int DLLEXPORT EN_runH(EN_Project ph, long *currentTime); @@ -280,25 +280,25 @@ typedef struct Project *EN_Project; - the time interval until the next change in demands occurs - the time interval until a tank becomes full or empty - the time interval until a control or rule fires. - + Example: \code {.c} long t, tstep; - EN_openH(ph); - EN_initH(ph, EN_NOSAVE); - do { - EN_runH(ph, &t); + EN_openH(ph); + EN_initH(ph, EN_NOSAVE); + do { + EN_runH(ph, &t); // Retrieve hydraulic results for time t - EN_nextH(ph, &tstep); - } while (tstep > 0); - EN_closeH(ph); + EN_nextH(ph, &tstep); + } while (tstep > 0); + EN_closeH(ph); \endcode */ int DLLEXPORT EN_nextH(EN_Project ph, long *tStep); /** @brief Transfers a project's hydraulics results from its temporary hydraulics file - to its binary output file, where results are only reported at uniform reporting intervals. + to its binary output file, where results are only reported at uniform reporting intervals. @param ph an EPANET project handle. @return an error code. @@ -316,20 +316,20 @@ typedef struct Project *EN_Project; Use this function to save the current set of hydraulics results to a file, either for post-processing or to be used at a later time by calling the ::EN_usehydfile function. - + The hydraulics file contains nodal demands and heads and link flows, status, and settings for all hydraulic time steps, even intermediate ones. - + Before calling this function hydraulic results must have been generated and saved by having called ::EN_solveH or the ::EN_initH - ::EN_runH - ::EN_nextH sequence with the initflag - argument of ::EN_initH set to `EN_SAVE` or `EN_SAVE_AND_INIT`. + argument of ::EN_initH set to `EN_SAVE` or `EN_SAVE_AND_INIT`. */ int DLLEXPORT EN_savehydfile(EN_Project ph, char *filename); /** @brief Closes the hydraulic solver freeing all of its allocated memory. @return an error code. - + Call ::EN_closeH after all hydraulics analyses have been made using ::EN_initH - ::EN_runH - ::EN_nextH. Do not call this function if ::EN_solveH is being used. */ @@ -343,10 +343,10 @@ typedef struct Project *EN_Project; /** @brief Runs a complete water quality simulation with results at uniform - reporting intervals written to the project's binary output file. + reporting intervals written to the project's binary output file. @param ph an EPANET project handle. @return an error code. - + A hydraulic analysis must have been run and saved to a hydraulics file before calling ::EN_solveQ. This function will not allow one to examine intermediate water quality results as they are generated. It can be followed by a call to ::EN_report @@ -355,7 +355,7 @@ typedef struct Project *EN_Project; One can instead use the ::EN_openQ - ::EN_initQ - ::EN_runQ - ::EN_nextQ - ::EN_closeQ sequence to gain access to gain access to water quality results at intermediate time periods. - + Example: see ::EN_solveH. */ int DLLEXPORT EN_solveQ(EN_Project ph); @@ -376,7 +376,7 @@ typedef struct Project *EN_Project; int DLLEXPORT EN_openQ(EN_Project ph); /** - @brief Initializes a network prior to running a water quality analysis. + @brief Initializes a network prior to running a water quality analysis. @param ph n EPANET project handle. @param saveFlag set to `EN_SAVE` (1) if results are to be saved to the project's binary output file, or to `EN_NOSAVE` (0) if not. @@ -384,16 +384,16 @@ typedef struct Project *EN_Project; Call ::EN_initQ prior to running a water quality analysis using ::EN_runQ in conjunction with either ::EN_nextQ or ::EN_stepQ. - + ::EN_openQ must have been called prior to calling EN_initQ. - + Do not call ::EN_initQ if a complete water quality analysis will be made using ::EN_solveQ. */ int DLLEXPORT EN_initQ(EN_Project ph, int saveFlag); /** @brief Makes hydraulic and water quality results at the start of the current time - period available to a project's water quality solver. + period available to a project's water quality solver. @param ph an EPANET project handle. @param[out] currentTime current simulation time in seconds. @return an error code. @@ -402,10 +402,10 @@ typedef struct Project *EN_Project; start of each hydraulic period in an extended period simulation. Or use it in a loop with ::EN_stepQ to access results at the start of each water quality time step. See each of these functions for examples of how to code such loops. - + ::EN_initQ must have been called prior to running an ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) loop. - + The current time of the simulation is determined from information saved with the hydraulic analysis that preceded the water quality analysis. Treat it as a read-only variable. @@ -415,7 +415,7 @@ typedef struct Project *EN_Project; /** @brief Advances a water quality simulation over the time until the next hydraulic event. @param ph an EPANET project handle. - @param[out] tStep time (in seconds) until the next hydraulic event or 0 if at the end + @param[out] tStep time (in seconds) until the next hydraulic event or 0 if at the end of the full simulation duration. @return an error code. @@ -426,20 +426,20 @@ typedef struct Project *EN_Project; The value of `tStep` is determined from information produced by the hydraulic analysis that preceded the water quality analysis. Treat it as a read-only variable. - + Example: \code {.c} long t, tStep; EN_solveH(ph); // Generate & save hydraulics EN_openQ(ph); - EN_initQ(ph, EN_NOSAVE); - do { - EN_runQ(ph, &t); + EN_initQ(ph, EN_NOSAVE); + do { + EN_runQ(ph, &t); // Monitor results at time t, which // begins a new hydraulic time period - EN_nextQ(ph, &tStep); - } while (tStep > 0); - EN_closeQ(ph); + EN_nextQ(ph, &tStep); + } while (tStep > 0); + EN_closeQ(ph); \endcode */ int DLLEXPORT EN_nextQ(EN_Project ph, long *tStep); @@ -454,7 +454,7 @@ typedef struct Project *EN_Project; quality simulation. It allows one to generate water quality results at each water quality time step of the simulation, rather than over each hydraulic event period as with ::EN_nextQ. - + Use the argument `timeLeft` to determine when no more calls to ::EN_runQ are needed because the end of the simulation period has been reached (i.e., when `timeLeft = 0`). */ @@ -464,11 +464,11 @@ typedef struct Project *EN_Project; @brief Closes the water quality solver, freeing all of its allocated memory. @param ph an EPANET project handle. @return an error code. - + Call ::EN_closeQ after all water quality analyses have been made using the ::EN_initQ - ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) sequence of function calls. - - Do not call this function if ::EN_solveQ is being used. + + Do not call this function if ::EN_solveQ is being used. */ int DLLEXPORT EN_closeQ(EN_Project ph); @@ -490,12 +490,12 @@ typedef struct Project *EN_Project; @brief Writes simulation results in a tabular format to a project's report file. @param ph an EPANET project handle. @return an error code - + Either a full hydraulic analysis or full hydraulic and water quality analysis must have been run, with results saved to file, before ::EN_report is called. In the former case, ::EN_saveH must also be called first to transfer results from the - project's intermediate hydraulics file to its output file. - + project's intermediate hydraulics file to its output file. + The format of the report is controlled by commands issued with ::EN_setreport. */ int DLLEXPORT EN_report(EN_Project ph); @@ -504,15 +504,15 @@ typedef struct Project *EN_Project; @brief Resets a project's report options to their default values. @param ph an EPANET project handle. @return an error code - - After calling this function the default reporting options are in effect. These are: - - no status report - - no energy report - - no nodes reported on - - no links reported on - - node variables reported to 2 decimal places - - link variables reported to 2 decimal places (3 for friction factor) - - node variables reported are elevation, head, pressure, and quality + + After calling this function the default reporting options are in effect. These are: + - no status report + - no energy report + - no nodes reported on + - no links reported on + - node variables reported to 2 decimal places + - link variables reported to 2 decimal places (3 for friction factor) + - node variables reported are elevation, head, pressure, and quality - link variables reported are flow, velocity, and head loss. */ int DLLEXPORT EN_resetreport(EN_Project ph); @@ -522,10 +522,10 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param format a report formatting command. @return an error code - + Acceptable report formatting commands are described in Appendix C of the EPANET 2 Users Manual. - + Formatted results of a simulation can be written to a project's report file using the ::EN_report function. */ @@ -536,18 +536,18 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param level a status reporting level code (see @ref EN_StatusReport). @return an error code. - + Status reporting writes changes in the hydraulics status of network elements to a project's report file as a hydraulic simulation unfolds. There are three levels of reporting: `EN_NO_REPORT` (no status reporting), `EN_NORMAL_REPORT` (normal reporting) `EN_FULL_REPORT` (full status reporting). - + The full status report contains information at each trial of the solution to the system hydraulic equations at each time step of a simulation. It is useful mainly - for debugging purposes. - + for debugging purposes. + If many hydraulic analyses will be run in the application it is recommended that - status reporting be turned off (`level = EN_NO_REPORT`). + status reporting be turned off (`level = EN_NO_REPORT`). */ int DLLEXPORT EN_setstatusreport(EN_Project ph, int level); @@ -576,7 +576,7 @@ typedef struct Project *EN_Project; @param[out] errmsg the error message generated by the error code @param maxLen maximum number of characters that errmsg can hold @return an error code - + Error message strings should be at least @ref EN_MAXMSG characters in length. */ int DLLEXPORT EN_geterror(int errcode, char *errmsg, int maxLen); @@ -620,9 +620,9 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param[out] units a flow units code (see @ref EN_FlowUnits) @return an error code. - + Flow units in liters or cubic meters implies that SI metric units are used for all - other quantities in addition to flow. Otherwise US Customary units are employed. + other quantities in addition to flow. Otherwise US Customary units are employed. */ int DLLEXPORT EN_getflowunits(EN_Project ph, int *units); @@ -631,9 +631,9 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param units a flow units code (see @ref EN_FlowUnits) @return an error code. - + Flow units in liters or cubic meters implies that SI metric units are used for all - other quantities in addition to flow. Otherwise US Customary units are employed. + other quantities in addition to flow. Otherwise US Customary units are employed. */ int DLLEXPORT EN_setflowunits(EN_Project ph, int units); @@ -684,11 +684,11 @@ typedef struct Project *EN_Project; @param chemUnits the concentration units of the constituent. @param traceNode the ID name of the node being traced if `qualType = EN_TRACE`. @return an error code. - + Chemical name and units can be an empty string if the analysis is not for a chemical. - The same holds for the trace node if the analysis is not for source tracing. - - Note that the trace node is specified by ID name and not by index. + The same holds for the trace node if the analysis is not for source tracing. + + Note that the trace node is specified by ID name and not by index. */ int DLLEXPORT EN_setqualtype(EN_Project ph, int qualType, char *chemName, char *chemUnits, char *traceNode); @@ -705,7 +705,7 @@ typedef struct Project *EN_Project; @param id the ID name of the node to be added. @param nodeType the type of node being added (see @ref EN_NodeType) @return an error code. - + When a new node is created all of it's properties (see @ref EN_NodeProperty) are set to 0. */ int DLLEXPORT EN_addnode(EN_Project ph, char *id, int nodeType); @@ -769,10 +769,10 @@ typedef struct Project *EN_Project; @brief Retrieves a property value for a node. @param ph an EPANET project handle. @param index a node's index. - @param property the property to retrieve (see @ref EN_NodeProperty). + @param property the property to retrieve (see @ref EN_NodeProperty). @param[out] value the current value of the property. @return an error code. - + Values are returned in units that depend on the units used for flow rate (see @ref Units). */ @@ -785,7 +785,7 @@ typedef struct Project *EN_Project; @param property the property to set (see @ref EN_NodeProperty). @param value the new value for the property. @return an error code. - + Values are in units that depend on the units used for flow rate (see @ref Units). */ int DLLEXPORT EN_setnodevalue(EN_Project ph, int index, int property, double value); @@ -798,7 +798,7 @@ typedef struct Project *EN_Project; @param dmnd the value of the junction's primary base demand. @param dmndpat the ID name of the demand's time pattern ("" for no pattern) @return an error code. - + These properties have units that depend on the units used for flow rate (see @ref Units). */ int DLLEXPORT EN_setjuncdata(EN_Project ph, int index, double elev, double dmnd, @@ -816,7 +816,7 @@ typedef struct Project *EN_Project; @param minvol the volume of the tank at its minimum water level. @param volcurve the name of the tank's volume curve ("" for no curve) @return an error code. - + These properties have units that depend on the units used for flow rate (see @ref Units). */ int DLLEXPORT EN_settankdata(EN_Project ph, int index, double elev, double initlvl, @@ -856,7 +856,7 @@ typedef struct Project *EN_Project; @param[out] preq Pressure required to deliver full demand. @param[out] pexp Pressure exponent in demand function. @return an error code. - + Parameters `pmin`, `preq`, and `pexp` are only used when the demand model is `EN_PDA`. */ int DLLEXPORT EN_getdemandmodel(EN_Project ph, int *type, double *pmin, @@ -870,13 +870,13 @@ typedef struct Project *EN_Project; @param preq Pressure required to deliver full demand. @param pexp Pressure exponent in demand function. @return an error code. - + Set `type` to `EN_DDA` for a traditional demand driven analysis (in which case the remaining three parameter values are ignored) or to `EN_PDA` for a pressure driven analysis. In the latter case a node's demand is computed as: > `Dfull * [ (P - pmin) / (preq - pmin) ] ^ pexp` where `Dfull` is the full demand and `P` is the current pressure. - + Setting `preq` equal to `pmin` will result in a solution with the smallest amount of demand reductions needed to insure that no node delivers positive demand at a pressure below `pmin`. @@ -922,7 +922,7 @@ typedef struct Project *EN_Project; @param demandIndex the index of a demand category for the node (starting from 1). @param[out] patIndex the index of the category's time pattern. @return an error code. - + A returned pattern index of 0 indicates that no time pattern has been assigned to the demand category. */ @@ -936,7 +936,7 @@ typedef struct Project *EN_Project; @param demandIndex the index of one of the node's demand categories (starting from 1). @param patIndex the index of the time pattern assigned to the category. @return an error code. - + Specifying a pattern index of 0 indicates that no time pattern is assigned to the demand category. */ @@ -949,7 +949,7 @@ typedef struct Project *EN_Project; @param demandIndex the index of one of the node's demand categories (starting from 1). @param[out] demandName The name of the selected category. @return an error code. - + `demandName` must be sized to contain at least @ref EN_MAXID characters. */ int DLLEXPORT EN_getdemandname(EN_Project ph, int nodeIndex, int demandIndex, char *demandName); @@ -961,7 +961,7 @@ typedef struct Project *EN_Project; @param demandIdx the index of one of the node's demand categories (starting from 1). @param demandName the new name assigned to the category. @return Error code. - + The category name must contain no more than @ref EN_MAXID characters. */ int DLLEXPORT EN_setdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName); @@ -980,15 +980,15 @@ typedef struct Project *EN_Project; @param fromNode The ID name of the link's starting node. @param toNode The ID name of the link's ending node. @return an error code. - + A new pipe is assigned a diameter of 10 inches (or 254 mm), a length of 100 feet (or meters), a roughness coefficient of 100 and 0 for all other properties. - + A new pump has a status of `EN_OPEN`, a speed setting of 1, and has no pump curve or power rating assigned to it. - + A new valve has a diameter of 10 inches (or 254 mm) and all other properties set to 0. - + See @ref EN_LinkProperty. */ int DLLEXPORT EN_addlink(EN_Project ph, char *id, int linkType, char *fromNode, char *toNode); @@ -1088,7 +1088,7 @@ typedef struct Project *EN_Project; @param property the property to retrieve (see @ref EN_LinkProperty). @param[out] value the current value of the property. @return an error code. - + Values are returned in units that depend on the units used for flow rate (see @ref Units). */ int DLLEXPORT EN_getlinkvalue(EN_Project ph, int index, int property, double *value); @@ -1100,7 +1100,7 @@ typedef struct Project *EN_Project; @param property the property to set (see @ref EN_LinkProperty). @param value the new value for the property. @return an error code. - + Values are in units that depend on the units used for flow rate (see @ref Units). */ int DLLEXPORT EN_setlinkvalue(EN_Project ph, int index, int property, double value); @@ -1114,7 +1114,7 @@ typedef struct Project *EN_Project; @param rough the pipe's roughness coefficient. @param mloss the pipe's minor loss coefficient. @return an error code. - + These properties have units that depend on the units used for flow rate (see @ref Units). */ int DLLEXPORT EN_setpipedata(EN_Project ph, int index, double length, double diam, @@ -1165,7 +1165,7 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param id the ID name of the pattern to add. @return an error code. - + The new pattern contains a single time period whose factor is 1.0. */ int DLLEXPORT EN_addpattern(EN_Project ph, char *id); @@ -1235,11 +1235,11 @@ typedef struct Project *EN_Project; @param values an array of new pattern factor values. @param len the number of factor values supplied. @return an error code. - - `values` is a zero-based array that contains `len` elements. - + + `values` is a zero-based array that contains `len` elements. + Use this function to redefine (and resize) a time pattern all at once; - use @ref EN_setpatternvalue to revise pattern factors one at a time. + use @ref EN_setpatternvalue to revise pattern factors one at a time. */ int DLLEXPORT EN_setpattern(EN_Project ph, int index, double *values, int len); @@ -1254,7 +1254,7 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param id The ID name of the curve to be added. @return an error code. - + The new curve contains a single data point (1.0, 1.0). */ int DLLEXPORT EN_addcurve(EN_Project ph, char *id); @@ -1346,11 +1346,11 @@ typedef struct Project *EN_Project; @param yValues an array of new y-values for the curve. @param nPoints the new number of data points for the curve. @return an error code. - - `xValues` and `yValues` are zero-based arrays that contains `nPoints` elements. - + + `xValues` and `yValues` are zero-based arrays that contains `nPoints` elements. + Use this function to redefine (and resize) a curve all at once; - use @ref EN_setcurvevalue to revise a curve's data points one at a time. + use @ref EN_setcurvevalue to revise a curve's data points one at a time. */ int DLLEXPORT EN_setcurve(EN_Project ph, int index, double *xValues, double *yValues, int nPoints); @@ -1429,7 +1429,7 @@ typedef struct Project *EN_Project; @param ph an EPANET project handle. @param rule text of the rule following the format used in an EPANET input file. @return an error code. - + Consult Appendix C of the EPANET 2 Users Manual to learn about a rule's format. Each clause of the rule must end with a newline character `\n`. */ @@ -1462,8 +1462,8 @@ typedef struct Project *EN_Project; @param index the rule's index (starting from 1). @param[out] id the rule's ID name. @return Error code. - - The ID name must be sized to hold at least @ref EN_MAXID characters. + + The ID name must be sized to hold at least @ref EN_MAXID characters. */ int DLLEXPORT EN_getruleID(EN_Project ph, int index, char* id); diff --git a/include/epanet2_enums.h b/include/epanet2_enums.h index 656386c..a445846 100644 --- a/include/epanet2_enums.h +++ b/include/epanet2_enums.h @@ -191,7 +191,7 @@ typedef enum { EN_PUMP_CLOSED = 2, //!< Pump closed EN_PUMP_OPEN = 3, //!< Pump open EN_PUMP_XFLOW = 5 //!< Pump open - cannot supply flow -} EN_PumpStateType; +} EN_PumpStateType; /// Types of water quality analyses /** @@ -249,7 +249,7 @@ typedef enum { EN_LPM = 6, //!< Liters per minute EN_MLD = 7, //!< Million liters per day EN_CMH = 8, //!< Cubic meters per hour - EN_CMD = 9 //!< Cubic meters per day + EN_CMD = 9 //!< Cubic meters per day } EN_FlowUnits; /// Types of demand models @@ -261,7 +261,7 @@ A demand driven analysis requires that a junction's full demand be supplied in each time period independent of how much pressure is available. A pressure driven analysis makes demand be a power function of pressure, up to the point where the full demand is met. -*/ +*/ typedef enum { EN_DDA = 0, //!< Demand driven analysis EN_PDA = 1 //!< Pressure driven analysis @@ -272,7 +272,7 @@ typedef enum { These options specify hydraulic convergence criteria, choice of head loss formula, and several other parameters applied on a network-wide basis. They are accessed using the @ref EN_getoption and @ref EN_setoption functions. -*/ +*/ typedef enum { EN_TRIALS = 0, //!< Maximum hydraulic trials allowed EN_ACCURACY = 1, //!< Maximum total relative flow change for hydraulic convergence @@ -308,7 +308,7 @@ These options determine what kind of statistical post-processing should be done the time series of simulation results generated before they are reported using @ref EN_report. An option can be chosen by using `STATISTIC option` as the argument to @ref EN_setreport. -*/ +*/ typedef enum { EN_SERIES = 0, //!< Report all time series points EN_AVERAGE = 1, //!< Report average value over simulation period @@ -408,7 +408,7 @@ typedef enum { EN_R_TIME = 9, //!< Elapsed simulation time EN_R_CLOCKTIME = 10, //!< Time of day EN_R_FILLTIME = 11, //!< Time to fill a tank - EN_R_DRAINTIME = 12 //!< Time to drain a tank + EN_R_DRAINTIME = 12 //!< Time to drain a tank } EN_RuleVariable; /// Comparison operators used in rule-based controls @@ -422,7 +422,7 @@ typedef enum { EN_R_IS = 6, //!< Is equal to EN_R_NOT = 7, //!< Is not equal to EN_R_BELOW = 8, //!< Is below - EN_R_ABOVE = 9 //!< Is above + EN_R_ABOVE = 9 //!< Is above } EN_RuleOperator; /// Link status codes used in rule-based controls diff --git a/include/epanet_py.h b/include/epanet_py.h new file mode 100644 index 0000000..f63e472 --- /dev/null +++ b/include/epanet_py.h @@ -0,0 +1,175 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: epanet_py.h + Description: EPANET API functions for Python SWIG wrap + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 12/10/2018 + ****************************************************************************** +*/ + + +#ifndef EPANET_PY_H +#define EPANET_PY_H + + +// Opaque pointer to project +typedef void *Handle; + + +#include "epanet2_enums.h" +#include "epanet2_export.h" + + +#if defined(__cplusplus) +extern "C" { +#endif + + +int DLLEXPORT proj_create(Handle *ph_out); +int DLLEXPORT proj_delete(Handle *ph_inout); +int DLLEXPORT proj_run(Handle ph, const char *input_path, const char *report_path, const char *output_path); +int DLLEXPORT proj_init(Handle ph, const char *rptFile, const char *outFile, EN_FlowUnits unitsType, EN_HeadLossType headLossType); +int DLLEXPORT proj_open(Handle ph, const char *inpFile, const char *rptFile, const char *binOutFile); +int DLLEXPORT proj_savefile(Handle ph, const char *inpfilename); +int DLLEXPORT proj_close(Handle ph); + + +int DLLEXPORT hydr_solve(Handle ph); +int DLLEXPORT hydr_save(Handle ph); +int DLLEXPORT hydr_open(Handle ph); +int DLLEXPORT hydr_init(Handle ph, EN_InitHydOption saveFlag); +int DLLEXPORT hydr_run(Handle ph, long *currentTime); +int DLLEXPORT hydr_next(Handle ph, long *tStep); +int DLLEXPORT hydr_close(Handle ph); +int DLLEXPORT hydr_savefile(Handle ph, char *filename); +int DLLEXPORT hydr_usefile(Handle ph, char *filename); + + +int DLLEXPORT qual_solve(Handle ph); +int DLLEXPORT qual_open(Handle ph); +int DLLEXPORT qual_init(Handle ph, EN_InitHydOption saveFlag); +int DLLEXPORT qual_run(Handle ph, long *currentTime); +int DLLEXPORT qual_next(Handle ph, long *tStep); +int DLLEXPORT qual_step(Handle ph, long *timeLeft); +int DLLEXPORT qual_close(Handle ph); + + +int DLLEXPORT rprt_writeline(Handle ph, char *line); +int DLLEXPORT rprt_writeresults(Handle ph); +int DLLEXPORT rprt_reset(Handle ph); +int DLLEXPORT rprt_set(Handle ph, char *reportCommand); +int DLLEXPORT rprt_setlevel(Handle ph, EN_StatusReport code); +int DLLEXPORT rprt_getcount(Handle ph, EN_CountType code, int *count); +int DLLEXPORT rprt_anlysstats(Handle ph, EN_AnalysisStatistic code, double* value); + + +int DLLEXPORT anlys_getoption(Handle ph, EN_Option code, double *value); +int DLLEXPORT anlys_setoption(Handle ph, EN_Option code, double value); +int DLLEXPORT anlys_getflowunits(Handle ph, int *code); +int DLLEXPORT anlys_setflowunits(Handle ph, EN_FlowUnits code); +int DLLEXPORT anlys_gettimeparam(Handle ph, EN_TimeParameter code, long *value); +int DLLEXPORT anlys_settimeparam(Handle ph, EN_TimeParameter code, long value); +int DLLEXPORT anlys_getqualinfo(Handle ph, int *qualcode, char *chemname, char *chemunits, int *tracenode); +int DLLEXPORT anlys_getqualtype(Handle ph, int *qualcode, int *tracenode); +int DLLEXPORT anlys_setqualtype(Handle ph, EN_QualityType qualcode, char *chemname, char *chemunits, char *tracenode); + + +int DLLEXPORT node_add(Handle ph, char *id, EN_NodeType nodeType); +int DLLEXPORT node_delete(Handle ph, int index, int actionCode); +int DLLEXPORT node_getindex(Handle ph, char *id, int *index); +int DLLEXPORT node_getid(Handle ph, int index, char *id); +int DLLEXPORT node_setid(Handle ph, int index, char *newid); +int DLLEXPORT node_gettype(Handle ph, int index, int *code); +int DLLEXPORT node_getvalue(Handle ph, int index, EN_NodeProperty code, double *value); +int DLLEXPORT node_setvalue(Handle ph, int index, EN_NodeProperty code, double value); +int DLLEXPORT node_getcoord(Handle ph, int index, double *x, double *y); +int DLLEXPORT node_setcoord(Handle ph, int index, double x, double y); + + +int DLLEXPORT dmnd_getmodel(Handle ph, int *type, double *pmin, double *preq, double *pexp); +int DLLEXPORT dmnd_setmodel(Handle ph, int type, double pmin, double preq, double pexp); +int DLLEXPORT dmnd_getcount(Handle ph, int nodeIndex, int *numDemands); +int DLLEXPORT dmnd_getbase(Handle ph, int nodeIndex, int demandIndex, double *baseDemand); +int DLLEXPORT dmnd_setbase(Handle ph, int nodeIndex, int demandIndex, double baseDemand); +int DLLEXPORT dmnd_getpattern(Handle ph, int nodeIndex, int demandIndex, int *pattIndex); +int DLLEXPORT dmnd_setpattern(Handle ph, int nodeIndex, int demandIndex, int patIndex); +int DLLEXPORT dmnd_getname(Handle ph, int nodeIndex, int demandIdx, char *demandName); +int DLLEXPORT dmnd_setname(Handle ph, int nodeIndex, int demandIdx, char *demandName); + + +int DLLEXPORT link_add(Handle ph, char *id, EN_LinkType linkType, char *fromNode, char *toNode); +int DLLEXPORT link_delete(Handle ph, int index, int actionCode); +int DLLEXPORT link_getindex(Handle ph, char *id, int *index); +int DLLEXPORT link_getid(Handle ph, int index, char *id); +int DLLEXPORT link_setid(Handle ph, int index, char *newid); +int DLLEXPORT link_gettype(Handle ph, int index, int *code); +int DLLEXPORT link_settype(Handle ph, int *index, EN_LinkType type, int actionCode); +int DLLEXPORT link_getnodes(Handle ph, int index, int *node1, int *node2); +int DLLEXPORT link_setnodes(Handle ph, int index, int node1, int node2); +int DLLEXPORT link_getvalue(Handle ph, int index, EN_LinkProperty code, double *value); +int DLLEXPORT link_setvalue(Handle ph, int index, int code, double v); + + +int DLLEXPORT pump_gettype(Handle ph, int linkIndex, int *outType); +int DLLEXPORT pump_getheadcurveindex(Handle ph, int pumpIndex, int *curveIndex); +int DLLEXPORT pump_setheadcurveindex(Handle ph, int pumpIndex, int curveIndex); + + +int DLLEXPORT ptrn_add(Handle ph, char *id); +int DLLEXPORT ptrn_getindex(Handle ph, char *id, int *index); +int DLLEXPORT ptrn_getid(Handle ph, int index, char *id); +int DLLEXPORT ptrn_getlength(Handle ph, int index, int *len); +int DLLEXPORT ptrn_getvalue(Handle ph, int index, int period, double *value); +int DLLEXPORT ptrn_setvalue(Handle ph, int index, int period, double value); +int DLLEXPORT ptrn_getavgvalue(Handle ph, int index, double *value); +int DLLEXPORT ptrn_set(Handle ph, int index, double *f, int len); + + +int DLLEXPORT curv_add(Handle ph, char *id); +int DLLEXPORT curv_getindex(Handle ph, char *id, int *index); +int DLLEXPORT curv_getid(Handle ph, int index, char *id); +int DLLEXPORT curv_getlength(Handle ph, int index, int *len); +int DLLEXPORT curv_gettype(Handle ph, int curveIndex, int *outType); +int DLLEXPORT curv_getvalue(Handle ph, int curveIndex, int pointIndex, double *x, double *y); +int DLLEXPORT curv_setvalue(Handle ph, int curveIndex, int pointIndex, double x, double y); +int DLLEXPORT curv_get(Handle ph, int curveIndex, char* id, int *nValues, double **xValues, double **yValues); +int DLLEXPORT curv_set(Handle ph, int index, double *x, double *y, int len); + +int DLLEXPORT scntl_add(Handle ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index); +int DLLEXPORT scntl_delete(Handle ph, int index); +int DLLEXPORT scntl_get(Handle ph, int controlIndex, int *controlType, int *linkIndex, double *setting, int *nodeIndex, double *level); +int DLLEXPORT scntl_set(Handle ph, int cindex, int ctype, int lindex, double setting, int nindex, double level); + + +int DLLEXPORT rcntl_add(Handle ph, char *rule); +int DLLEXPORT rcntl_delete(Handle ph, int index); +int DLLEXPORT rcntl_get(Handle ph, int index, int *nPremises, int *nThenActions, int *nElseActions, double *priority); +int DLLEXPORT rcntl_getid(Handle ph, int index, char* id); +int DLLEXPORT rcntl_getpremise(Handle ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex, int *variable, int *relop, int *status, double *value); +int DLLEXPORT rcntl_setpremise(Handle ph, int ruleIndex, int premiseIndex, int logop, int object, int objIndex, int variable, int relop, int status, double value); +int DLLEXPORT rcntl_setpremiseindex(Handle ph, int ruleIndex, int premiseIndex, int objIndex); +int DLLEXPORT rcntl_setpremisestatus(Handle ph, int ruleIndex, int premiseIndex, int status); +int DLLEXPORT rcntl_setpremisevalue(Handle ph, int ruleIndex, int premiseIndex, double value); +int DLLEXPORT rcntl_getthenaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting); +int DLLEXPORT rcntl_setthenaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting); +int DLLEXPORT rcntl_getelseaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting); +int DLLEXPORT rcntl_setelseaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting); +int DLLEXPORT rcntl_setrulepriority(Handle ph, int index, double priority); + + +void DLLEXPORT err_clear(Handle ph); +int DLLEXPORT err_check(Handle ph, char** msg_buffer); +void DLLEXPORT toolkit_free(void **memory); +int DLLEXPORT toolkit_getversion(int *version); + + +#if defined(__cplusplus) +} +#endif + + +#endif //EPANET_PY_H diff --git a/src/epanet_py.c b/src/epanet_py.c new file mode 100644 index 0000000..a5d2ff2 --- /dev/null +++ b/src/epanet_py.c @@ -0,0 +1,807 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: epanet_py.c + Description: EPANET API functions for Python SWIG wrap + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 12/10/2018 + ****************************************************************************** +*/ + + +#include +#include + +#include "epanet_py.h" +#include "util/errormanager.h" +#include "epanet2_2.h" +#include "text.h" +#include "types.h" + + +typedef struct { + Project *project; + error_handle_t *error; +}handle_t; +// Extern functions +extern char *geterrmsg(int, char *); +// Local functions +void error_lookup(int errcode, char *errmsg, int len); + + +int DLLEXPORT proj_create(Handle *ph) +{ + handle_t *handle = (handle_t *)calloc(1, sizeof(handle_t)); + + if (handle != NULL) + { + EN_createproject(&handle->project); + handle->error = error_new_manager(&error_lookup); + *ph = handle; + return 0; + } + return -1; +} + +int DLLEXPORT proj_delete(Handle *ph) +{ + handle_t *handle = (handle_t *)*ph; + + if (handle == NULL) + return -1; + else + { + EN_deleteproject(&handle->project); + error_dst_manager(handle->error); + } + free(handle); + *ph = NULL; + + return 0; +} + +int DLLEXPORT proj_run(Handle ph, const char *input_path, + const char *report_path, const char *output_path) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_runproject(pr->project, input_path, report_path, output_path, NULL)); +} + +int DLLEXPORT proj_init(Handle ph, const char *rptFile, const char *outFile, + EN_FlowUnits unitsType, EN_HeadLossType headLossType) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_init(pr->project, rptFile, outFile, unitsType, headLossType)); +} + +int DLLEXPORT proj_open(Handle ph, const char *inpFile, const char *rptFile, + const char *binOutFile) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_open(pr->project, inpFile, rptFile, binOutFile)); +} + +int DLLEXPORT proj_savefile(Handle ph, const char *filename) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_saveinpfile(pr->project, filename)); +} + +int DLLEXPORT proj_close(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_close(pr->project)); +} + + + + +int DLLEXPORT hydr_solve(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_solveH(pr->project)); +} + +int DLLEXPORT hydr_save(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_saveH(pr->project)); +} + +int DLLEXPORT hydr_open(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_openH(pr->project)); +} + +int DLLEXPORT hydr_init(Handle ph, EN_InitHydOption saveFlag) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_initH(pr->project, saveFlag)); +} + +int DLLEXPORT hydr_run(Handle ph, long *currentTime) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_runH(pr->project, currentTime)); +} + +int DLLEXPORT hydr_next(Handle ph, long *tStep) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_nextH(pr->project, tStep)); +} + +int DLLEXPORT hydr_close(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_closeH(pr->project)); +} + +int DLLEXPORT hydr_savefile(Handle ph, char *filename) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_savehydfile(pr->project, filename)); +} + +int DLLEXPORT hydr_usefile(Handle ph, char *filename) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_usehydfile(pr->project, filename)); +} + + + + +int DLLEXPORT qual_solve(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_solveQ(pr->project)); +} + +int DLLEXPORT qual_open(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_openQ(pr->project)); +} + +int DLLEXPORT qual_init(Handle ph, EN_InitHydOption saveFlag) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_initQ(pr->project, saveFlag)); +} + +int DLLEXPORT qual_run(Handle ph, long *currentTime) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_runQ(pr->project, currentTime)); +} + +int DLLEXPORT qual_next(Handle ph, long *tStep) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_nextQ(pr->project, tStep)); +} + +int DLLEXPORT qual_step(Handle ph, long *timeLeft) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_stepQ(pr->project, timeLeft)); +} + +int DLLEXPORT qual_close(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_closeQ(pr->project)); +} + + + + +int DLLEXPORT rprt_writeline(Handle ph, char *line) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_writeline(pr->project, line)); +} + +int DLLEXPORT rprt_writeresults(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_report(pr->project)); +} + +int DLLEXPORT rprt_reset(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_resetreport(pr->project)); +} + +int DLLEXPORT rprt_set(Handle ph, char *reportCommand) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setreport(pr->project, reportCommand)); +} + +int DLLEXPORT rprt_setlevel(Handle ph, EN_StatusReport code) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setstatusreport(pr->project, code)); +} + +int DLLEXPORT rprt_getcount(Handle ph, EN_CountType code, int *count) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcount(pr->project, code, count)); +} + +int DLLEXPORT rprt_anlysstats(Handle ph, EN_AnalysisStatistic code, double* value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getstatistic(pr->project, code, value)); +} + + + + +int DLLEXPORT anlys_getoption(Handle ph, EN_Option code, double *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getoption(pr->project, (int)code, value)); +} + +int DLLEXPORT anlys_setoption(Handle ph, EN_Option code, double value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setoption(pr->project, (int)code, value)); +} + +int DLLEXPORT anlys_getflowunits(Handle ph, int *code) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getflowunits(pr->project, code)); +} + +int DLLEXPORT anlys_setflowunits(Handle ph, EN_FlowUnits code) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setflowunits(pr->project, code)); +} + +int DLLEXPORT anlys_gettimeparam(Handle ph, EN_TimeParameter code, long *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_gettimeparam(pr->project, code, value)); +} + +int DLLEXPORT anlys_settimeparam(Handle ph, EN_TimeParameter code, long value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_settimeparam(pr->project, code, value)); +} + +int DLLEXPORT anlys_getqualinfo(Handle ph, int *qualcode, char *chemname, char *chemunits, int *tracenode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getqualinfo(pr->project, qualcode, chemname, chemunits, tracenode)); +} + +int DLLEXPORT anlys_getqualtype(Handle ph, int *qualcode, int *tracenode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getqualtype(pr->project, qualcode, tracenode)); +} + +int DLLEXPORT anlys_setqualtype(Handle ph, EN_QualityType qualcode, char *chemname, char *chemunits, char *tracenode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setqualtype(pr->project, qualcode, chemname, chemunits, tracenode)); +} + + + + +int DLLEXPORT node_add(Handle ph, char *id, EN_NodeType nodeType) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_addnode(pr->project, id, nodeType)); +} + +int DLLEXPORT node_delete(Handle ph, int index, int actionCode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_deletenode(pr->project, index, actionCode)); +} + +int DLLEXPORT node_getindex(Handle ph, char *id, int *index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getnodeindex(pr->project, id, index)); +} + +int DLLEXPORT node_getid(Handle ph, int index, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getnodeid(pr->project, index, id)); +} + +int DLLEXPORT node_setid(Handle ph, int index, char *newid) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getnodeid(pr->project, index, newid)); +} + +int DLLEXPORT node_gettype(Handle ph, int index, int *code) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getnodetype(pr->project, index, code)); +} + +int DLLEXPORT node_getvalue(Handle ph, int index, EN_NodeProperty code, double *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getnodevalue(pr->project, index, (int)code, value)); +} + +int DLLEXPORT node_setvalue(Handle ph, int index, EN_NodeProperty code, double value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setnodevalue(pr->project, index, (int)code, value)); +} + +int DLLEXPORT node_getcoord(Handle ph, int index, double *x, double *y) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcoord(pr->project, index, x, y)); +} + +int DLLEXPORT node_setcoord(Handle ph, int index, double x, double y) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setcoord(pr->project, index, x, y)); +} + + + + +int DLLEXPORT dmnd_getmodel(Handle ph, int *type, double *pmin, double *preq, double *pexp) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getdemandmodel(pr->project, type, pmin, preq, pexp)); +} + +int DLLEXPORT dmnd_setmodel(Handle ph, int type, double pmin, double preq, double pexp) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setdemandmodel(pr->project, type, pmin, preq, pexp)); +} + +int DLLEXPORT dmnd_getcount(Handle ph, int nodeIndex, int *numDemands) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getnumdemands(pr->project, nodeIndex, numDemands)); +} + +int DLLEXPORT dmnd_getbase(Handle ph, int nodeIndex, int demandIndex, double *baseDemand) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getbasedemand(pr->project, nodeIndex, demandIndex, baseDemand)); +} + +int DLLEXPORT dmnd_setbase(Handle ph, int nodeIndex, int demandIndex, double baseDemand) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setbasedemand(pr->project, nodeIndex, demandIndex, baseDemand)); +} + +int DLLEXPORT dmnd_getpattern(Handle ph, int nodeIndex, int demandIndex, int *patIndex) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getdemandpattern(pr->project, nodeIndex, demandIndex, patIndex)); +} + +int DLLEXPORT dmnd_setpattern(Handle ph, int nodeIndex, int demandIndex, int patIndex) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setdemandpattern(pr->project, nodeIndex, demandIndex, patIndex)); +} + +int DLLEXPORT dmnd_getname(Handle ph, int nodeIndex, int demandIdx, char *demandName) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getdemandname(pr->project, nodeIndex, demandIdx, demandName)); +} + +int DLLEXPORT dmnd_setname(Handle ph, int nodeIndex, int demandIdx, char *demandName) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setdemandname(pr->project, nodeIndex, demandIdx, demandName)); +} + + + + +int DLLEXPORT link_add(Handle ph, char *id, EN_LinkType linkType, char *fromNode, char *toNode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_addlink(pr->project, id, linkType, fromNode, toNode)); +} + +int DLLEXPORT link_delete(Handle ph, int index, int actionCode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_deletelink(pr->project, index, actionCode)); +} + +int DLLEXPORT link_getindex(Handle ph, char *id, int *index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getlinkindex(pr->project, id, index)); +} + +int DLLEXPORT link_getid(Handle ph, int index, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getlinkid(pr->project, index, id)); +} + +int DLLEXPORT link_setid(Handle ph, int index, char *newid) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setlinkid(pr->project, index, newid)); +} + +int DLLEXPORT link_gettype(Handle ph, int index, int *code) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getlinktype(pr->project, index, code)); +} + +int DLLEXPORT link_settype(Handle ph, int *index, EN_LinkType type, int actionCode) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setlinktype(pr->project, index, type, actionCode)); +} + +int DLLEXPORT link_getnodes(Handle ph, int index, int *node1, int *node2) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getlinknodes(pr->project, index, node1, node2)); +} + +int DLLEXPORT link_setnodes(Handle ph, int index, int node1, int node2) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setlinknodes(pr->project, index, node1, node2)); +} + +int DLLEXPORT link_getvalue(Handle ph, int index, EN_LinkProperty code, double *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getlinkvalue(pr->project, index, code, value)); +} + +int DLLEXPORT link_setvalue(Handle ph, int index, int code, double value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setlinkvalue(pr->project, index, code, value)); +} + + + + +int DLLEXPORT pump_gettype(Handle ph, int linkIndex, int *outType) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getpumptype(pr->project, linkIndex, outType)); +} + +int DLLEXPORT pump_getheadcurveindex(Handle ph, int pumpIndex, int *curveIndex) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getheadcurveindex(pr->project, pumpIndex, curveIndex)); +} + +int DLLEXPORT pump_setheadcurveindex(Handle ph, int pumpIndex, int curveIndex) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setheadcurveindex(pr->project, pumpIndex, curveIndex)); +} + + + + +int DLLEXPORT ptrn_add(Handle ph, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_addpattern(pr->project, id)); +} + +int DLLEXPORT ptrn_getindex(Handle ph, char *id, int *index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getpatternindex(pr->project, id, index)); +} + +int DLLEXPORT ptrn_getid(Handle ph, int index, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getpatternid(pr->project, index, id)); +} + +int DLLEXPORT ptrn_getlength(Handle ph, int index, int *len) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getpatternlen(pr->project, index, len)); +} + +int DLLEXPORT ptrn_getvalue(Handle ph, int index, int period, double *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getpatternvalue(pr->project, index, period, value)); +} + +int DLLEXPORT ptrn_setvalue(Handle ph, int index, int period, double value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setpatternvalue(pr->project, index, period, value)); +} + +int DLLEXPORT ptrn_getavgvalue(Handle ph, int index, double *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getaveragepatternvalue(pr->project, index, value)); +} + +int DLLEXPORT ptrn_set(Handle ph, int index, double *values, int len) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setpattern(pr->project, index, values, len)); +} + + + + +int DLLEXPORT curv_add(Handle ph, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_addcurve(pr->project, id)); +} + +int DLLEXPORT curv_getindex(Handle ph, char *id, int *index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcurveindex(pr->project, id, index)); +} + +int DLLEXPORT curv_getid(Handle ph, int index, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcurveid(pr->project, index, id)); +} + +int DLLEXPORT curv_getlength(Handle ph, int index, int *len) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcurvelen(pr->project, index, len)); +} + +int DLLEXPORT curv_gettype(Handle ph, int index, int *type) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcurvetype(pr->project, index, type)); +} + +int DLLEXPORT curv_getvalue(Handle ph, int curveIndex, int pointIndex, double *x, double *y) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcurvevalue(pr->project, curveIndex, pointIndex, x, y)); +} + +int DLLEXPORT curv_setvalue(Handle ph, int curveIndex, int pointIndex, double x, double y) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setcurvevalue(pr->project, curveIndex, pointIndex, x, y)); +} + +int DLLEXPORT curv_get(Handle ph, int curveIndex, char* id, int *nValues, double **xValues, double **yValues) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcurve(pr->project, curveIndex, id, nValues, xValues, yValues)); +} + +int DLLEXPORT curv_set(Handle ph, int index, double *x, double *y, int len) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setcurve(pr->project, index, x, y, len)); +} + + + + +int DLLEXPORT scntl_add(Handle ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_addcontrol(pr->project, type, linkIndex, setting, nodeIndex, level, index)); +} + +int DLLEXPORT scntl_delete(Handle ph, int index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_deletecontrol(pr->project, index)); +} + +int DLLEXPORT scntl_get(Handle ph, int controlIndex, int *controlType, int *linkIndex, double *setting, int *nodeIndex, double *level) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getcontrol(pr->project, controlIndex, controlType, linkIndex, setting, nodeIndex, level)); +} + +int DLLEXPORT scntl_set(Handle ph, int cindex, int ctype, int lindex, double setting, int nindex, double level) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setcontrol(pr->project, cindex, ctype, lindex, setting, nindex, level)); +} + + + + +int DLLEXPORT rcntl_add(Handle ph, char *rule) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_addrule(pr->project, rule)); +} + +int DLLEXPORT rcntl_delete(Handle ph, int index) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_deleterule(pr->project, index)); +} + +int DLLEXPORT rcntl_get(Handle ph, int index, int *nPremises, int *nThenActions, int *nElseActions, double *priority) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getrule(pr->project, index, nPremises, nThenActions, nElseActions, priority)); +} + +int DLLEXPORT rcntl_getid(Handle ph, int index, char *id) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getruleID(pr->project, index, id)); +} + +int DLLEXPORT rcntl_getpremise(Handle ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex, int *variable, int *relop, int *status, double *value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getpremise(pr->project, ruleIndex, premiseIndex, logop, object, objIndex, variable, relop, status, value)); +} + +int DLLEXPORT rcntl_setpremise(Handle ph, int ruleIndex, int premiseIndex, int logop, int object, int objIndex, int variable, int relop, int status, double value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setpremise(pr->project, ruleIndex, premiseIndex, logop, object, objIndex, variable, relop, status, value)); +} + +int DLLEXPORT rcntl_setpremiseindex(Handle ph, int ruleIndex, int premiseIndex, int objIndex) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setpremiseindex(pr->project, ruleIndex, premiseIndex, objIndex)); +} + +int DLLEXPORT rcntl_setpremisestatus(Handle ph, int ruleIndex, int premiseIndex, int status) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setpremisestatus(pr->project, ruleIndex, premiseIndex, status)); +} + +int DLLEXPORT rcntl_setpremisevalue(Handle ph, int ruleIndex, int premiseIndex, double value) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setpremisevalue(pr->project, ruleIndex, premiseIndex, value)); +} + +int DLLEXPORT rcntl_getthenaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getthenaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting)); +} + +int DLLEXPORT rcntl_setthenaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setthenaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting)); +} + +int DLLEXPORT rcntl_getelseaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_getelseaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting)); +} + +int DLLEXPORT rcntl_setelseaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setelseaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting)); +} + +int DLLEXPORT rcntl_setrulepriority(Handle ph, int index, double priority) +{ + handle_t *pr = (handle_t *)ph; + return error_set(pr->error, EN_setrulepriority(pr->project, index, priority)); +} + + + + +void DLLEXPORT err_clear(Handle ph) +{ + handle_t *pr = (handle_t *)ph; + error_clear(pr->error); +} + +int DLLEXPORT err_check(Handle ph, char** msg_buffer) +// +// Purpose: Returns the error message or NULL. +// +// Note: Caller must free memory allocated by EN_check_error +// +{ + int errorcode = 0; + char *temp = NULL; + + handle_t *pr = (handle_t *)ph; + + + if (pr == NULL) return -1; + else + { + errorcode = pr->error->error_status; + if (errorcode) + temp = error_check(pr->error); + + *msg_buffer = temp; + } + + return errorcode; +} + +int DLLEXPORT toolkit_getversion(int *version) +{ + return EN_getversion(version); +} + +void DLLEXPORT toolkit_free(void **memory) +{ + free(*memory); + *memory = NULL; +} + +void error_lookup(int errcode, char *dest_msg, int dest_len) +// Purpose: takes error code returns error message +{ + char *msg = NULL; + + switch (errcode) + { + case 1: msg = WARN1; + break; + case 2: msg = WARN2; + break; + case 3: msg = WARN3; + break; + case 4: msg = WARN4; + break; + case 5: msg = WARN5; + break; + case 6: msg = WARN6; + break; + default: + { + char new_msg[MAXMSG + 1]; + msg = geterrmsg(errcode, new_msg); + } + } + strncpy(dest_msg, msg, dest_len); +} diff --git a/src/util/errormanager.c b/src/util/errormanager.c new file mode 100644 index 0000000..3f4f47c --- /dev/null +++ b/src/util/errormanager.c @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// +// errormanager.c +// +// Purpose: Provides a simple interface for managing runtime error messages. +// +// Date: 08/25/2017 +// +// Author: Michael E. Tryby +// US EPA - ORD/NRMRL +//----------------------------------------------------------------------------- +#include +#include +#include "errormanager.h" + +error_handle_t* error_new_manager(void (*p_error_message)(int, char*, int)) +// +// Purpose: Constructs a new error handle. +// +{ + error_handle_t* error_handle; + error_handle = (error_handle_t*)calloc(1, sizeof(error_handle_t)); + + error_handle->p_msg_lookup = p_error_message; + + return error_handle; +} + +void error_dst_manager(error_handle_t* error_handle) +// +// Purpose: Destroys the error handle. +// +{ + free(error_handle); +} + +int error_set(error_handle_t* error_handle, int errorcode) +// +// Purpose: Sets an error code in the handle. +// +{ + // If the error code is 0 no action is taken and 0 is returned. + // This is a feature not a bug. + if (errorcode) + error_handle->error_status = errorcode; + + return errorcode; +} + +char* error_check(error_handle_t* error_handle) +// +// Purpose: Returns the error message or NULL. +// +// Note: Caller must free memory allocated by check_error +// +{ + char* temp = NULL; + + if (error_handle->error_status != 0) { + temp = (char*) calloc(ERR_MAXMSG, sizeof(char)); + + if (temp) + error_handle->p_msg_lookup(error_handle->error_status, temp, ERR_MAXMSG); + } + return temp; +} + +void error_clear(error_handle_t* error_handle) +// +// Purpose: Clears the error from the handle. +// +{ + error_handle->error_status = 0; +} diff --git a/src/util/errormanager.h b/src/util/errormanager.h new file mode 100644 index 0000000..2a8099f --- /dev/null +++ b/src/util/errormanager.h @@ -0,0 +1,27 @@ +/* + * errormanager.h + * + * Created on: Aug 25, 2017 + * + * Author: Michael E. Tryby + * US EPA - ORD/NRMRL + */ + +#ifndef ERRORMANAGER_H_ +#define ERRORMANAGER_H_ + +#define ERR_MAXMSG 256 + +typedef struct error_s { + int error_status; + void (*p_msg_lookup)(int, char*, int); +} error_handle_t; + +error_handle_t* error_new_manager(void (*p_error_message)(int, char*, int)); +void error_dst_manager(error_handle_t* error_handle); + +int error_set(error_handle_t* error_handle, int errorcode); +char* error_check(error_handle_t* error_handle); +void error_clear(error_handle_t* error_handle); + +#endif /* ERRORMANAGER_H_ */