From 961b1de4c59ff0e0796262a043305e3e7f12e4d7 Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Fri, 27 Jun 2025 15:32:34 +0200 Subject: [PATCH 1/3] [Testing] Update unknownTargetObject/receiver testcases Fixes #1356 --- .../v2.0.1/Receiver/README.md | 20 +- ...nTargetObject.receiver.deprecated.plantuml | 79 + ...nknownTargetObject.receiver.deprecated.png | Bin 0 -> 65605 bytes ...ownTargetObject.unknownClass.receiver.yaml | 4 +- ...argetObject.unknownMountName.receiver.yaml | 1865 +++++++++++++++++ ...gram.unknownTargetObject.receiver.plantuml | 58 - ...i+diagram.unknownTargetObject.receiver.png | Bin 80285 -> 18908 bytes ...argetObject.unknownMountName.receiver.yaml | 192 -- 8 files changed, 1963 insertions(+), 255 deletions(-) create mode 100644 testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.plantuml create mode 100644 testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.png rename testing/2_functional/unknownTargetObject/v2.0.1/Receiver/{ => _deprecated-services tests}/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml (99%) create mode 100644 testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/README.md b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/README.md index 684368c0..6a04ab38 100644 --- a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/README.md +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/README.md @@ -1,9 +1,23 @@ # Functional Testing of Unknown Target Object (in RequestBody) Handling of the Receivers +Two separate testcase collections are provided, due to all device change/alarm *regard*-services being deprecated. + +### Not deprecated services + +The service to regard controller attribute value changes is not deprecated. + ![Overview](./mwdi+diagram.unknownTargetObject.receiver.png) Notes: -- (1) `/v1/regard-controller-attribute-value-change`: for both known and unknown mount-names a 204 is returned +(1) `/v1/regard-controller-attribute-value-change`: for both known and unknown mount-names a 204 is returned + +### Deprecated services + +The services to regard device notifications (including alarms) are all deprecated. + +![Overview](./_deprecated-services%20tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.png) + +Notes: - (2) `/v1/regard-device-attribute-value-change`: 500 expected - the mount-name is provided by the Controller/device itself, not by a 3rd party application or a user, therefore the provided mount-name can be considered valid - if it is not known by MWDI then this is not a client/caller error (400), but a MWDI (i.e. server) error @@ -24,5 +38,5 @@ Notes: Note: - testing both (4.1) and (4.2) with the same simulator is not possible, as the simulators currently only return a single fixed answer - therefore two separate simulators are provided: - - `MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml`: for all tests except (4.2) and (5.2) - - `MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml`: just for (4.2) and (5.2) \ No newline at end of file + - `MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.deprecated.yaml`: for all tests except (4.2) and (5.2) + - `MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.deprecated.yaml`: just for (4.2) and (5.2) \ No newline at end of file diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.plantuml b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.plantuml new file mode 100644 index 00000000..39fbba0d --- /dev/null +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.plantuml @@ -0,0 +1,79 @@ +@startuml mwdi+diagram.unknownTargetObject.receiver.deprecated +skinparam responseMessageBelowArrow true + +title +mwdi+testcase.unknownTargetObject.receiver.deprecated +end title + +participant "Postman" as Postman +participant "Data" as Data +participant "Collection" as Collection + +participant "/v1/regard-device-alarm" as RDA +participant "/v1/regard-device-attribute-value-change" as RDAVC +participant "/v1/regard-device-object-deletion" as RDOD +participant "/v1/regard-device-object-creation" as RDOC + +group Preparation + Data --\\o Postman : {servers, collection-input-list} + activate Postman + Postman --\\o Collection : {servers, collection-input-list} +end + +group /v1/regard-device-alarm + Collection --\\o Postman : {servers, collection-input-list} + Postman -> RDA : {requestBody with unknown mountName in resource} + Postman <-- RDA : 500 + note right Postman #Orange + check for 500 + end note +end + +group /v1/regard-device-attribute-value-change + Collection --\\o Postman : {servers, collection-input-list} + Postman -> RDAVC : {requestBody with unknown mountName in object-path} + Postman <-- RDAVC : 500 + note right Postman #Orange + check for 500 + end note +end + +group /v1/regard-device-object-deletion + Collection --\\o Postman : {servers, (object-creation) target} + Postman -> RDOD : {requestBody with unknown mountName in object-path} + Postman <-- RDOD : 500 + note right Postman #Orange + check for 500 + end note +end + +group /v1/regard-device-object-deletion + Collection --\\o Postman : {servers, (object-creation) target} + Postman -> RDOD : {requestBody with known mountName, but unknown class in object-path} + Postman <-- RDOD : 533 + note right Postman #Orange + check for 533 + end note +end + +group /v1/regard-device-object-creation + Collection --\\o Postman : {servers, target} + Postman -> RDOC : {requestBody with unknown mountName in object-path} + Postman <-- RDOC : 404 + note right Postman #Orange + check for 404 + end note +end + +group /v1/regard-device-object-creation + Collection --\\o Postman : {servers, target} + Postman -> RDOC : {requestBody with known mountName, but unknown class in object-path} + Postman <-- RDOC : 404 + note right Postman #Orange + check for 404 + end note +end + +deactivate Postman + +@enduml diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.png b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+diagram.unknownTargetObject.receiver.deprecated.png new file mode 100644 index 0000000000000000000000000000000000000000..29bb23ec6721cba11a82ef07f5e546b1f8d5f58b GIT binary patch literal 65605 zcmcG$1ymGz_$>-3s3S;=h=QbqfP#WFlG5GX9nuYoBP9(Y-CfcRiXa2h-AH$Lzuy3! zb3Et%@4D};`&ehKGi#jq<@fDx@BNLBq_`j&yB0`hGHgzND)k-#(L z#O$`vATbgQ_+t`|!(&<>3 z*|oP2As`?{8ObWz{C*w*5qyqA%-E+1iIJxmO%taIF{Ken!6BdQ(7T=^3YFdJDtVVD zQT=)5H3t@35q)N7@wuzrFbd_P`d*=)@ssIV``V7!*a!GiQ7!DAE|K2$KEE>O9LvI( zrD#<=^HV3c59@UV z?B1=GpuSf((HciJmnkW+6&EAX1W4{8M_ji^Ymsc9CHRHXKkbEr`B;6u^4s@ZNxew_ z$GyUC%wxW9BzNyTPg8xY{x00RYZ`yRk(M&hFq!+xZ$>2hsA zIKNFzfvx$r5!Vnm+uT$1kx)f@`EN#>*FO&TXfzbq5)E4|n2vdIBph`)zSqWD_2ye$ zIKNf^)gm%AVX~R}NYE3~IyspQ>z&IdDQf;g8#(`SWy!cV0Ojo03#0tj^Tc9%sk4V~ zUT<^_cs(3?cufC&@OjZhqs26%r4TDZjrqhndZkzFP||w|2jm*!om0(UH_kBXyHH2> z2$x;r;^bTvYj%SMn+n}r#`v|;tEVi@8Sz+9e(A>!IiS-CMDyQk7B(ce4r>sfpAN@# zk+PAZ%<`W=uf~35Db?e3_?h3K?dQjw=kh*5MhIG6%jm}|t=g2UfwBm<3Of-8$`JWT z_Xq^G1=KT!jnohjJP?HVUdcKPuhgK~$oIvr$J;VKyMB|{Bl5M5Z~-^z2fR0w)0z#R zN1C4FAh|bhzVN9obmXU~l$nbO3r9WG;*pV&5fTzoRaJFzI!fgABJ;$e z4WZjK8z~iX*`8~|;9;Au!=M|4^lLZ_mz1d$jz`dfj=gJ?5)!JpnScfd2meEIuyl z8MWMH(a6?RD?&Cq(X``!6^p(*k9aZgLTpsz@|bMehmUrb$w_orY?s2KaGL31{mXs@x*8wzaA)VEV1B>5i@eCl$RQ+)ZpL4BJAIAJ zP;zB(!x%mJjs_m(<@F`YyxlJc2Lr5M=VNG&R1{xRi8_R+<Ha-~j<{82&joIimJetIvTqLQ%*F6>7o>9SC7e=%a$ghW zc+sg=h)j+K6 zU0=PhsYqor!<0iid`8(i2U4*9Z+pdV>m>aGjW#66eV((ctE*GENwlv0nyZPpfhCJY z;-_`tZqL25O?DS#e?0?72Y%Lf@c}(d8O>FFNwMQ zo6Ls}vn{x>ByS9=-23JMpaH1O^uTrako1%#IP9HDnj7+fs6nT6CSnHy5u4;Z^9qHcp=v-Vq%hg^nu#F zBbMzk)e%aB^k-UHS}eTSAwlR9jR-SGENtw)#H1vWL&~->r{!D%CezN5mleje1Dk{_ zRx^oSgwh)MwuCYzgdB^(Ja?@l@32^iIpav3R=6A%Hq7QXU}IsqvWULbe}3$ZZ6>u)wwPQ-{B;;cmc^Y8D-gqx`vJzmgypt z`E&bsd2I={%3`@3xf-ZbtIBT1d-w1_OayW8C@ZLDddV&|BzWoDfZoqf%@epZ@``mZ z^>WK^yu{8Kmoj>_@y5Ek`9;B=HT1fZ ztBQTMCye57F0I9VQ0y&7O!FeuR-_ZYNnzRy5sc{!VU@{-GB84>;=a(}U}7S4LiP-q zUbF8)p%hBn+4f5O_gVB*I>82YC94&J?QtjdUT+q(4Rv1|t*FWPCKpo$pGX$-h#IaH z5!zHw3H#qOL6IlU9?%F43F$4WA|WL=ALD(^Awsn!I@Q?NSR(_Api?{AcR%0H%O95- zt#hvvEE^dai7mshMa$x%uRGbwlu4KEkSlFy;3J>u&3oOR-&<;Yy2Ixlh)3gtg~2~e z3VlL5H#ZlhF1l*v?55c8<#`HO!I@D^f_3k0s40AMm6J-!%G3{KT2u`-z9gFU_m1>p zQ;5EF+)8nAnUA$6TN}+3sgb8O6H;BrnJoevHs~~E_DQ{$sQ2cPj;(Epi>QP|L|v8L z>Q+xi*~=Zp=vT{O(hP}&X=^2~s?~mWWPa6A1(_8D=X;9KCleupAMYh$Vxl zQzP-$*3n6A2d8oY&r?NN83KXy1~$O#^-kq;i$1K5l%=PnWK4YSVnzvkz>?%fO~uT- zzcN(RUC@`U;4BNDW_eUplzv+jxg&*mOh(z@ZhlZzty5`#Wpj~Gx$g|DwKdF5INx-? zzj{6c4>F`nH^72>;~ukl%#N_xw!Z6wFzC$pAEXHL!JwvP4Sz8As zk7fKQn!fCkWn9}Yc8d>4kvta9tV(vfkH#9FR)SwF&O)sdY?Pamv$GMZey?Fh`AhWJh@SMyIlN_PQBvQ=F&JHbyWqmU`Y6+)V;#V5!AMMmQe+f{=1sd5w*e#OI>*%@j zTqJ_7dU8BE%#u4j|*Z3z!1(`%^GO6BJ7(D zp(#_U!@r0K(dI18W!6OVs$?HgYB9C^)oR4LQxwc?B zQaa^5>0G0QdbhiuiynBn58mBkT$v6$XJ~cyM!xy-+S{-1NH8qbkP-vON8%xeU4qO4 zp_5Ez!|$J?VKbS#kj$Jta=p1tsEvr!&i&|1!p-Zd5!?&O`$<9mS^(|5mce0&Kzzde z760b-yEtz>ma!yZl)5+!kjS41cOU&iy^eI-m;0;jt&8XIp{;rdw=pbHklrHmKl)X9 z9lQ=7`jKaj!Q-DJxp+>1*c$)qKb8g&yiR~PIj90v^B*JexOh$qri$|AAG81JOe#c7 z^wJUsyys3hJ%7KR=A*l}@pzEhF?_x`G2QcK{QgKIN=fp)p<0~FGcb_J=^D?(Ae~wg zCMLVVFItX{w8!me7TN`%CoX2(B9MU&N6JYvk^T}*|XPaQl}Y< zW_m~Mjt*qP-y*mtkXEI&XDL?v?RJo`>WXKBY~_zhNrA&{5x6`y1P z|HLLgo%h}XSZgIoDHpq44V4L81`SlpF&KyAo!b37r95_LkGZQ|4mKu}jL){{=W7r3 zLxpp4Mvo2L@8S^<9M`OmmD{hojpXv|Zf2&J`r|V)Q5o4d9_9%WozB97Npttn(H}ao zJ)Wn_l*h6t*Xp)#KTcZvXc%tcN+U+SUpwK=6Tk<};VW#-@gf*>X`Z1zwZ(V%_4dV7 zd_N9mb5dkYghw`ydX1Br_7r7vwdv5rA|K{BGO|cYxlL{9Uc4HfNN4HE6W?0Zn-(=M zOgiF*m-7g~He{E~7k-sfJ+fXIG@3UR{x)%b=AI>9d$M(YpKVXsj8(xT!-jir|ASM?7Ss+)0#h}yKqtrb$`bS^# z+Z!CoQ>d6rsLxPTUAaeIiQma0upixw-(Tlia4PHzS6oINmP04KZmU0V=b$Vw+bk99 zuymFEcz25CeRk2|3c+n^RJ^bzT*d{Y#j(c9fwYYt#M*nmDm~{a(?WCOo42-WTrI1a zuS1kvUZW&WZE=Xk$Vrohg`X;;W_9m6WM#X@$8mn!C7QIKP&@c`W3_{0KcrkoYf^&D zJY0Zz+@YsGmrb^<`@N_S9c7w=K=GU)v7kRsDTPz{+ji5I9*u~%>u&bGF;ilKVj^D; zQzZjh-bI*BEm>{3&IF?=zqOc9rwX2r&+qDZSTX)$%kXDM(n1OH48x-ca-UJ>b@#Hf zqF)6~aY5V3zUxEVH|9;3-Ys>yA6vN7aB#huI(Jay#agdgcN5}r+^SJ3s$Flw&gm15 z=+9Bg_dRdaXnm%3Q*21pS?_)c-7KqT8sadIB>FzfMuLHC3^63;8-CfLhj`uLT%E&m zu6-Y)#?-xWq`s)N^lS>!>#KE{*Em;oSmpE$Zp0YW#koPBvP5^(79`YLzH(H3R)hCC zpT6Jq88rURMkB(&!v_N|X7?GDI4XnCGWI|GqB6m6h41k0o2{AkOhJjhx(7c#;%853 zW9q2}3O44PQy&btpAI_LgTxz)T=V!I^Z_zt=sTJy?h-pVmKz83ADgf&-KanT8TEun zP4ayHbvtLjO`wdApo-gF{(M?V^;(n7sk%=vll&UTG23Z5i&+b0<;oH@gPzKSqEHHx zjG{W<^$GVc>5t#Hw&D--5jOs@5>8$TgllgoR=V(U4ZI}{o~j9$%|CFpcr_f}e@dgv zrH013n|2n>`m2XCO(r$INTV|!gTi2Yi21JUJvz!jnzVhS#ofkA`oE6TbfuekDQDA^ zD=~rO`orGX%J(TLUHjw56VXweZ{$doMPwDu)fxN_g+<)&?&wj=oXkd?4_rgfQ7Yds zFGz@QDwc#vWd@y=zcqQzlPVf3Ymrl7AMmo*18k!g=XVt;4U56;`Lxz3OJpXblB9dF2YZKNQl7lzL~Dn zgynZKAD4A!=ByhT>`|q6iyv<3pe>WP%-{Of$Jf4ZCi?05Zi{X2I3CYHRt(22);#r? zTQ_8hr%{P*K8#c8p3ZhlxW%j4zToM+oEah2OdK7Und1qYCo=Bb?Us4mo(gU!`+~J9 zsuP1>eu#N&pYukNo0qzvrrb5m4G^W#dMEeM3R?%>?~{aTbG9xsu;8Ot-;xC-5`(Z<*DSoAP&%ojg0zb3995VBpo)IPXum z9mn>EfndA}F7#^=k^ML^l~*eHqWzzr>3lkK=W{(Ja(3b=2e+}4!fCfpheGD_<@Twy z*rIS`6~ec#G1BrE4nsSJvcX1vkcRWBm}^q`TIFW@N!pRCU0>hLSH~7h9vuRnan#3! zmZI%*MHWvoo~lX`Du}KlcQ5E=B?(JjN=#ORpNC+4JXNij{| z(Q;~aL8yZq_GY3#mN<(m-;ZRB&lNLuO7x{A1mEDM52IoSO4`qi)fh(m zwQBqEL++?hyIpfSryFfLP2%%2qqE9&9eI`ai5IFrgOe|%FcS5#vj?hU#T4(V^9nlo zZmV3ok}e1i8Vr3eLBpMZ>S5X2JP(Jl2)D5Ki(6@vBIIzr72Y#6EoM`C6|eFI}y5e$XVvFso@vu zCt{%A9wZ~sN&ai8V1MGg6J+z$k*!rpGn9-y+t!~dl&2Bo$@`j5Y45I=qD=8n%5&H( zn3?#-#HQ+$KJJJW8-cJo&l;oMvhooYeL$`dTUe;E>`r;aPW<}du*3bCeyd{UD_`dr zBGDny8mj>12&-7IU^&DK5~laJKCWwEj8nH zE3guTfks>STeyj>iBZJ{i{{ZIBN_85C^)H%cD80|X02f47#D9`yLcmwLLMQL>E~TE z`aI-vx;#ICc&`D3%ue=i&<#HCKZqIS{}`Qb^?fnwp-7?n4{)Cu-+++@^85Fl?P_pM z5n3H=?DVLJ$FUPAM;tWLyW!9MtAY_+UzLEKw9uRBRd6 z@;H~ROoKQ_0alFCe|RwRTq$X9BFYCK7porA=~KRzD$|A;KF`sTd!?+?$fSD*j)bN~IqgB!n?o?O>Q zM6gHJ#6=jtO{sfw?Oy{Zd^j$1WAp>`>l1`uc?da3U!92?Acviayl=S^GBOO2QQ7tM z^i&W?eCOu$+Y{mS?^9WvLfG^@1cYm#GM#+@*XIy;`HAsxahoH4v8`7Zp`wJ;*Ygx? zgIc@{iSOoZJUYG$!vAZhG>k?*Cy4$V$t0`hBgffrg@*S0n!WpLH-qax(W+c(34oo! zvC{o2t_B7Rd5NZdT@zRH`d4RoDfc0J!$jiGr@>&AEGDrD2-r*qzZ`DQ*MT%Wnf6)^ zT?!T>e-9IaUx#$DAs+kn9yGeR?kAf~y|A01K`wSA<1A#;;A$(OsR73{b3OO`^=G>W`nGua<6618+=@RtAqyLor z-3y(bj_y-yzbSp~!BmD+vU$bqCq{$zj2-)NM+5LRAzXBHYiZHufMSX_Dajkksr$7g z`;(zHm{d@hSy))u^jc7f7m9oREPCJxqgMnXU@Zd8M_q+#2 zaSw4r{U#oCbbS15JN{gCitDH=Fvm;XX_0(af2&aM=Zp?Nf8%xs7k#i7k=tOD+2Pjg zNSQ?hjAMT^x!a)iGjX93iABxsrTlDO-n*CVc;Gkhh6=#vsv~-<` zHKEwf`q*?6p))EyUQ|3Hko0b)d^=soBWncQ10Q9x-O6qA~jkS5Ozl z@cH`s=1A`W+@E}8Y#x%IW=bj;Ad7A>;>&)r@f|Cob%|p}kjT{r1BYSD0YfvL4u`=F zIR@n!2qaIDe$`++gB(r=a;ew49Bxd0pPrsBDk_qQWz}mdbv@qG`u+i2vzq;JXX;ZZ zp87pDyPTV2Q&ZaLhsG_X&im#@3qXRgH7~C*?#r4SV?X%inOC!_0sY8M_y90y|N0_r z=z}pX)z*I1iyIKxhYv$xpKzZrhn?;!-sFV5&n2FG(!${x*O-@KDPbQ5c=SQz*F010|m1oEG(>}0kirW zc1zm-NDgbvQ`6J7EVQ9flesv13tK-q9TOw=5?|>WJO2ELm=3si$->j zjy|E9Z;y?BZY14#k|rLa}v&52pmJ)86ZSye^qPR1wpJ3bhtNI6S ztGD2bFA2kJ4X07q8Eed2!;{a>$|CFT>`ds*kyKTEvZO#lvI@dc@l;l3W`)h7w2@Kf z0=LjmiAeHIQ7kSDV-G;o8dEaE zUzqfJkMZqP*4CM=eqc-|yNin}l+^o#W7CjhfkXGW{jAI6OqwIF7oL$-fX}Ogu_|vDmKB~1YLqpr3Xi{(<_N7-YhV2Gi(!cP9 z&|uJR@CN$rGCW=^RZKNBG=x5uFwRZ&@%Jye^)#1|-;o+RcQJ1@PoYj_iw;)O_PFc0 zopQ;nDvJ#4n5)Xw>9&;t^Gq)Wo|ogN|o8c0YXhaB||JlH@(E zR%Pc;#HH@qTgECDQkamCkdi`1Pv2qSHXtub_V_UycIvIvAE{WhCo$b!C6DuPD~)B> z(qeQL_RR*WS^x<*G;ZP6p)mr{!BFDP=)7gC|I$68k7 z6$9w&xUkY%Ruxs%oIUuC!dYz@4>?&`nBX(Nj+4CH&q2d?9+z365Q(gMJN^PZA1Zmwjf_}a4!%fxo*hp4(O1?U_HGvFG^L5hQd1@6hb=5Exp^~V z+Y7ab7{dPz_PZoV&5yY zTlF!40yWu5!eUvypD=evnOH$q_O%MQI!pS6@})jLK5X`Dy)3zETX_?GaivqNi~s<) z&O#3CpqL(V9+&{!fm=;-au?|MpFVvW_P<$QHsQu*sMIA3K+0zzbb9M5;NQjCaUC|a z%fUEZ!n%C_Z!9I17sO9E(dloKSzCKHWDsAo`GbI;c3CBviSu}+=pmcksNIN}l9CeE z;mLLfxzyB=mm}{_Ae&3UuDt@9ryJJ=iEV}KQdR#un&ME;z=4F~7j7UzxG5T%o8Jw7 zaPzupWS`h{bLiur6VpwBD(G@@a?lR5nT*F|X`ckLv$IP^_#%adGX1VVipM?@TjBvveKo=$1<0KA0`y*p@E2j`_X@ya z#ufGkN$ASN0<>x7!OYw6Z%BXj5n$nu7dRd_puHxci;JF~q3zCtR zt~Yy`MtAriw!}eDQ1B53d<7!^QBZh3Sj~5i!^{o(-gy(eZY7IWg@@-|y!1*hlqcZm zA0IokZ0O=r9k4!82T&&+6B837<2Eo3P!}X8lQJ_abYFYx(NKawLr)+7^37Bjl}uE0 zH2Ey>2ZU0HK`uipF&CG{^|F zEIGJaAO+>vw^VuC>5|1kqCIq7~Be&aI?7mE32 z@+q4W4#nW1Gp3u4g++bUi9Q8yp|ci=z=26=ervcfWGf;GkkOLeG*^Sh}>~IQ-i> zUwpovyStaeIJF|w2~m5IRTNJ59lI;9(OEftnNk#A6nK4p0R?`BQUvevmV5B*ReHt5 z$6JWtbXA!QiNRD~`|hr4kCCq*fkDs^ z5)dqdZ3MUm`e663njIOZa6oEVrU?Y0XkgGv@vfCl%FaF}9_N1ahzejaF)=amL;JN+ zmctBmSqM)Dv^_|RovE5ZNJRbeY+9FN^Y%Kc|?sZ4>w*WhW`!@;jEwHlX zOHjgkk3iA#`vrxFBwk|o%|<*l<9T-t2KeeD%ep0nz@hEIcbc`B8T|Qs=riWB}X<0#ZMZ zf)N3$^H(@c2pY@G%7Vm?z@#Kzi_-ebD<~W{HQpiz!=D4LhPdf{;DezI%Si}h6l;phY ztPO4beedz1s81i2k4tj`OyE$pot_I0069nTxzZ&;00M(5PGJIJTSQ%hkD$^CNJ$_M zAK_`ZeB-#Z7veDN2We#_+gHl36UTEn%M(rg^$!qyCjlE%3(c{g%JNfS9R`2iuS2@1 z5#SjSd@~2BaVZQhxLWfY((*d7mnxzCrisL5>bR_p-u4J*7#bN>0G}4`@fs-of8zdK zb?~5E@B{!rT#!Hr;}@LTMI{1?ioYtXW%_S`?-*q$|A@~x_kz*N<~H|JLWf_70?#dB zMsH&)FDWF1aW))W1_Te9li>?TB`Ps=bab@(1rGdO3HU6PxCr$g8$&D?*;?}}u2sgb zt9gP*mHgX#31>vkNRLXHHNT_$qig~~`VI=X6Q7a4s{JlLLB0bi{U28Zp1=M{Rv}8l z{$_wcV%7ADt@Ka=+4mn=6dowA92M{fzx|z>2{>E8(TMbxTS}_S_Z#`MXK(z#6p%<0%xwJ%c)vU-6<{QRI^eDEfRj(2E@KjIK?Rmvv0X9>h*& zb;nuU&C~&PXMa%Rf|q{;{+NWIH*nGpzF%MotdnM}kSTSqD50bvFzpyhaLFL}7YrHv zKqpl1_N#y@V6QzCWW5*r#k~lLrICxyac8vmwpvKlhy^G1P)rBEJ^?n6D_Si$Jt*E` z$|ocQtEUSDSEcKYroI6b%Al?n(T;&KBD z5!d-)2a)s2Gaqkq4X4G_w=yu`rwO+UB;;rbxpoN|QE{Osqt+d#3xZrB-rmot;MP&0 z69C__B5-=zB-Dh7uu3S9t#Q_&^$0-vIzYL)JNFkB%aA8Ln_gEzMHV>%x4)i;2ao*hW? zQI2Wy+YO?V2=_xgA8&oaM~+Y0gic8sl`Jj|${xfiLHrB8-JvkX4t7$#R1}|Vrx}$n zA>w7}qoCSwr`3{ymL`D5fH&4BB|SZRM=Dt$b0?7NY*2nAJHNIP&@VvTsZl!s~d&1#5Ib^p60WpcXIoZQbShTnB0IqsJqQIdAQF;Z@{4L;Lri+VvE z+_ch*+zR56edBM`?~S_!_B{Lut0p2OgaPa&V1XpgKm?PgdZu8MF2aKDW9nCsAQvNS ze|Mt;kztF@QpmDH?0!)0In_o++b}kl=N8MxH(6MsYx#XB>Yvl0#I+ICu zV@~RC(|-ho8#w8ut0ks=zEL%^pHu|=?~@}9>d>1Eu&2>g1PmyD0qn5T3)8`;Ca(gA zpSz*VTL1D)4*ITT0tmnVjD`3_NmJ_cLkzN{hUr{Z zGw=co;rvk`2y5^N4H$@@EiE(79e|0~AW#Jsg`VYP44wdRUwx4-?<-$A&z-*gxZd7g zbs}U*P_X?u14>;FIOh%zc5f8^Q4+zk#ozG{6i$~@|2y4+N)vu8{t`@3zI+!~`}fEA zuZ)xd+MMqG+!Kl)cQ++K2r7!>v`Y?Dtm^gCQuh0K0-l!E zsOMCMZZb3!DR4Fi)1kW)F!!?BDk>@6xZo| zJF~K~LSFOodP*1Z03e;A;p1IQLq*l)3jp;TU};lRQj8h~QilD-$V#u>xbr$C zFOQCtl$V@Nqqe%RP}=7^a3n{jB%1(WZG#({CJ)Rrq;}X{%SUIWB?Rp;A&RoHWIobG zI}ORZ3Hw2|4SjL#&aiGnJT_azBA|1ry;0D_g{NqMs&9440>b4;M_pZAODmDg&dzSB z;m!1qOz#DiF<(V)DmtlXkxx&8y-#q-@t+#$?oOy^TpRwlDL+|o1Xa88HU6*RSmT_m1d$UG9E2~0AsVGTfRcfjF4!Qs1g6SuRE<7UtML-wgmF@>IGBEUp zcK0h7fM%3Fb=4OyURckyzJYx4^@SW#>TgC)l)y_~c*jWh;9!OZ0Ub59w8gkE+W0y# z8+rsR|U5_3z#x)ufl%(whXz zJLLw^P*bPmf(vBJs6;aY*j9j5mSXy^M))QcaG4%TKugX0t#f%RL!Z=JY)&YMG}zd6aRZFD~G1@q$;Vzw^ASl^|#fz)jLnn*#dOW$62hof8Ux({aGcmYkvI zYSR0|Al|i9rzv2>yo#2FMua5Z{j7paSoQp=g`rZN8wUjR4Vsyu9n~^lwK$Qe5MT0f zPHu`1&3+SdEdN_V?iuGLHhyG`YXy2Ll$E2#iA0FT3Us{O9uMuNJ-cihKtM-VjAMu$7q=^yreo*IajQ@m(%|A1^ z4d~AZ!F!^pdCH+X^DH6gE!dK4S0eU@Bp!J{SuNNHBC>neuA&Wo`RBh%!Z_G~9(>sg z2ItohAm~m4*X(xU3(&YwSDFKT|NcGqBg?%NrMe<4>>hNPV>$9t_1);@9Syn3 z4{h2YV&k{I6|B_KLj#G(%AEf~tw;#s%?SbqSs)$p8n%Un;V8sf1C7-ms1>oSFUamU z_tM}LO85b^w+zBGuhy?qo(nqf>z%80vGT^Xf~ESETx)M9BO`my=i;;vfj;Qf1{nji zw{R05H`QfdQAAL7NeBxk=Qy=a%g>*W#bXBhTxDpOnVCV-#JKrdRnO4G1Z4R8%;u_c za^d~#dD`722WO|p}c=^l`az~vpMJtB%)W^a$< zP!W4yl4IjM*BUAPl$@Nu8fGw|I@W9pIT`#m(j2QkEHkaR+|kj2w@71c59r7Bf(?l) zaTme@#D3X~-S+UE>a;Wgjt6jEW2OyIjvzS8egI8EUFg!nB;$agEYCn9_q~7re%O1< zyJd;|y<4+CX=rG|J(NmKBhC3y=}v0DWEE=fEUxTZcd&GI%jv(3R$DZ9a(6+pJd8+jlDZ zqoALjG~~6KS}f|Q^OHiX)DbDiAG#x`AX3B4BVV1RV8Mw&{MT@Ba1`rim)94jfB4H_ z9_HoyJ%0Q+8x`yoeAW(^nfW=jGE7CCdYA5pR}u=+5V_rKv=ETMM?S15;hBUrE>Rd2E4s%Cf|^d+zV8IGSHPMhy5{o z16|#ProdAih3`8<+l02={Yjj;4x{*MQrgzm+n}+fsBop;gMSPYwmT%iLvLF6S$%>4ZM%=~9T4~O4UetRlz4&ha(LN+ zO^HVtkK43AbILp+i(1oi`h1N%ta~a)smK%_@tU>O##E#i!y+`?l!~>brMp3VIib;2 zu-{4!QnO#$va?d4w~Y-*_^rj(J!V$g##MyHAO|C0M%G`BLH6XeQIEL%2Yq@V;fh3Q_q@X}Rt^uQw&U&jen&y44|6U%FJV_Ft2{dz=J0M3kslA2?z%&+T!Bvi#_Rb)ipI7%*+E} zH!*Mgd-*+h>czT}oL9F-AYXh(qrl!;3i4R?ORd2LErm_nYa6oduiW^rk0Rs*1J+oG8} z{)cHjCM5+yZCrAzys!|Ic0OujTr0(PtIE6I#X-Oy{i5ah=c2g)JO^+PAlJYSq>4n; z0ud!-5GeUr(CX@H@WTo+B)_Wx=!4jGIFSBb2K-$wpyGo|_D6XNO4YA&z$Ne}lL_hx z%0El#OF09F;h)ZcKWqDIgIeiy|M{5zRax@)cz%x|pQnoA|EQvV1H?z0nQc&BY7e1-4+T^fTPg|SCz2j}Yd z&O+;#+acJjfxz zq#yWMnL}~VwE3@pEPQs;wJZLW-?}>`1t*<;v&LRR`_C#J)7RQf0iO?&RVlKYh8@|m>s)1W9ZLrsyZ7gpPx-_p9mjk6c)%HzpLgOQm{srXEz8d?q@nbrI=RHFp=F&D1_+*=d;dNOsM*= zC}GN2DFjVz**iMt=>l>+m6<;V$xT*K% zF#7q)a&kNCtfAay1j{}LM$t}b_U7RE49N#I>^}$1#Ifiiq1cqWAe}a4?|!}nVtmI? zvYQF7a?6pU2n*-h&l_20=xWjbnrk!Z3AL_k;DEtq&3+Tk7$G0ANbHh+$u4v<0iwh} z1AXxMZqL!mfPLw_-aYV*g#W#qGxQo{oI8Vkuctd!>9IzpLW&L}vxB4Lo>|u}XCJiQ z(y*Xe%?je@$u>w|COZ4!3~MKmJ|tMK3u_ABcdZB=`i;Ad0=`+2g_tlXaYhPBQyy4v%f6yDAl)8Wg z`4>+E008e<3!5pJD*^#(G-MpP*Gtosm?q4B`6p+Z%+Md|#iSB3b!!6MH>g z*+RPLp+LDX3OIPeT{|8N3b3}eHWl7);C*+Zf|FGc5gx?^EhFQ}0`0@w3i^QB0sZPX zh~WL@a76^}^hpj%JpWByUHba33<5Q9-?BcU<-diF-;EJ~DhBuQpGx}$t@aQ1*=3GF z_)FV^Q&*RNmzJF0Xb?Pij}q##(3!~nNK#g|Sld!aRCH8ZARrIno>N$OxEUfaPjg#a zGfqe%BGgL}`>_YWjZ+@4bOF2I!n=w$xO{U%eZc^#3fTMf#fzp31Rg=a%I7oyX48!3 zeH8e$9j)tM)wF&omRk}-Du^cct$^bZ=rDl4 zOC(2MNajixtqyQwoN69$EN~MSU4V4>8M<(!c<|`MK}AM@cfRM}W1bANTv+&lXDRmV9c?17#jgR}uJbM{;q3kfoVab5{^n2usnCNj+1_r#9 z!1zp9ISYPB#}59k;OwC9t8erW` z2D<3%Pxps1n!jX)fVLb7@^Q=WXl@^=7!EF5OLQ$HwtEWPw8koJrRz>+P5<6n5*z-f zuV=vG1Q$wsHpp>Ubu&}xf}wZY&*WY8nGBDQ(*^JB*o1Q$_fm$RZ8i~&7(4&nXd?8{ z-`_SDF6Aywr^mY)OT*IG^VAsp2b3inJ~yO>mEiUum^q-f;0$=$a*)vq^Zi)R$U#}n zYD(EpIzL;THdd5t28M+6DPZAu`*;Wh;=!$G_O|(k-Qf7s6$53$A}!vRz%jE1q13%} zm#n?zA>?o>UJ%;-WdfRbK#vE15^Msvoqaz&1%q#Ke0}}nu98Nsfox?F43PcgZUbue zFPNB|s?(O|(bQ!K2k0Vy5EK*lAmkq4%hIEm^u2Y=RC?}%=_vX&G&N$sd}R?LnP)Xs%G^tA6WBuxsVAn(rhuQjGuQq9hq<#3 zi*jw-J+@dVs2B)>gtUTyv<^y_q~sU_NQrcV$|wfP&>^XWv<^7HkfOj)qI9DIN(e|d z?CTjY*ZRJ9AK$U}vG@DW>%zf#;*KkR=Xr07r=lbfBp5Bv5GbqP2-KKwKs_4~L;F=vs1l-7SEN0tW z^zuM-9O{C<87J?j_z*+tf#cJu85u$XpAu8jrN8sDC+wOvZD@RvaCgzJ?2wRixQh8? z4`_T4eCcC4IKkz# zSq*qgE;7#VWa_N9(6fbI2HCPolo@IF?=PhG5S#CR);;&m5%8jP@HKg2Rp>l3(wRYV z4xgAb(>2!#Fc)ISLUA+|aJC)0fJ0dOZ?}CmP$Y~LIuBtB~=vl2Z z{EvPng(hc$$S#e{T?CC$B}q>Yx5H{ryVG_*&DDpqi3J6nIw}l#A7oMu21`$*l^S`N zo15!2u5IA|y>{rP=FZi<2UJhNmjamY0Y2_U{?Ch-5k?tZ- zPp}2Fu&^*T{_@&ui{=&R7G1xd9=B!vy8GtqvbbyOWla6a>OG=+nr$xVsl*t2%xO zd{vj4pqHO?;P0G2sCxL+& z|Hq)BLR38Ax*s}sx%f7RsWTz{F2po0^D9`LrB7$=LuXy{Bl^}LK|h3e(nt`5==hMD z&)a)@z=^Sm0e1IB+ftC4u&G2f=qi8=)tu&%uK0s-jcqk#Se>{zAm&w9l)W^#I3VbQ zJ)zFXiK*?Clgg0Ykvr^OrcJ3E#K1(64qA%{o%s}ZYgIh_=oGot&`y1Ra-{8*IaF2$ zpA|Nm`Ue7m0ShZslE@r2ldy1W*m0%f0z5&-KYiu+L0C*(kFP2h$27kM7S+zaTdJvD zY3P}M%R|7qr?ZYg(A-B4s1n@Owu8t6Ey1a-LIA^|jmIoT8KHsloGm^rMV>9|PtK zYj?W3Tdh`q$$bh>5S}Ap-Ge>Ie)*dK=+9RVPYFQ~exI>q1mXAZhJX9F%ZF63n9Mu; zK7vlf?HdO#HrQQJ*J`Gxr!%G&HjRRiX!1>ihvxk>?WHdwOWK+_mori+7ZDL};qXP#Kyyzht|-6qV|kw+_z^Az4ymvH}egV9ZemE#R-wNf|saf z-?zOqLFT^D^W=-k|CP-_kjni)7iTN?zk0rwUoL8fP!Z<7@tf1U|+9csOR zE^&N~lMArh5>e2W=V%3e(JVtWdQ`pfc+hDG4b9ozHOk^Q#hELAb@H0-(7B%$0OEKR zd3pa^4NXn-r*9nP=B~**zanKDS>Bpyl5+n=aL{!y0af3Y5EplkcJ3SWD07w1s)~l* zbp~!^Y`OCPcBTWn}o6PWbbw+i9){>sJjMZ2gp|(x>{dr?V?ut50dK&GCKs z=c+?X#|NC1lpeX9CV=Rv;_#d?T21XK-`;)u?pFq>QIBbn(o6du7OJh^xpSwyx9G$6 z_e^HcXaKfL-k2BA>1?LWAkh$(&bKz_b%A5ehxaG~g|i z>e&YbV~vJ`8jhvilecy^X=gqb8Q*YWplh%(rC`YMvCy?zF9$UnfcYLQNAQ~{L)4a8 z3O>87TpjhXIz6BsDf4Ghu#f>x4a6FGMD$Hsxo??P=_435Qd6O@ki`vqW_A`OS@sV^ z|JT0!3Qs4sm>>h;J8m`1F@VR!d6?>Mb9ut_yr&{O=XT{&f$?j-n6U8z*B_;U^5~zHq7#=gyl^hbqdP6+OD7VtpV}3ppky({Cm%Klt0VV6h`N0U_q6lxuU%sX>i^XLinzv z`mrtCV(b*{RXtMs(FGKh`&{I1Ve}`0HW4GrVS6Z}b&!%W-lfgK{ygEv_m8ik(G)YMj*l*MOMDjd;NHAbgL`bY zRkvXJ6Fm*>95W)l>Ir%o}p3#M|-HEN@i!ic>c zGwHknq5^o+!W{=2edbLY3(U9qg@siJU~bxMq71u0p<2M)yR1TLTEI=&0hI%hx1xrY z77s{!YoK{11+~h2Ql=7_=2|oOm+VD6b%*QGo7)=SJ>|wK*T8H>Gg8>VymxJ2( z0|%opI@;Y5x~i(G;E+p$54AQpNbhepJ=#5b%E=!bdv~`H?Nc!J0|NEyP9F)X*KW|& zD;AfAMXNt$hM>?EWp!MpYY5Bbs;@MH``S>seTc3B2h7>iM)P&nl4QdLgFFT+?LfJgj3E95k z#nR5u&;xRDWmNUL+LF+_1@RNcmk)iu?_Ij6=_7{tCLpn*qoXs5)V0M4x>}QSZu7wx zrf{F2(+VCRhp3ikidG5=C+Y`b6ps%=%-P6TktL8C{wQ8=kvs z(_5fS!k2?EHEjC8e3J01izdw*(kGEuEEff(BEWsM`{CAMkdm6V2)4khW;Y4P;f_W= z<(b~xnb%+lhRxN1{#xQ!%r@44f_1n;0b02(3k0P-@}G9*ndnTk>`+ZV%E-TsA~^&r z##J<&WRi9QyP_B}32z4#|5T;N?YRe)VE6RKNt6`0uD$VInQtzt+sh0!O3K#ZMkr-1 zZAv@VQ#%PW76Jl*P6Fi5XDG8vE9+ZVBh8o|K z0&#gko=?Zn!`cnp92}KjCtAC9ZNokV$z<|#hUmMEzFy}A;|up6KEn&7pUR*=;4ZMh zLnzgT#qOXu3W4NqP~?jUAaP^u6*o6G6siOsX>Ob%#DX~7y2HmtYtJozkEf*w!KKP7 zH-!YUYg6+b*c9WkhldiX1ugPQN}4p1v#+UUIlZxTUuFyGR13C-U=_0&cXVqxJ&U8I zNMQg)(ERmYfYHUr-qJwvVHS$k08yfH{c*34Q#5X;<~xJhTyXRIgL0rGV3bqmhvzk|)i3(!6Rx)^?&eB%L#k`Dgr3~CoQV|G>+IG`5c zyZk_^2G>G?RX|BNkM{ziW^{{46d?kd0bfsXIRpm|#)h6tQ=kM&N_5fE(yGh&C}$8u zdnUJTE3)!FqDZFw6odmjePCt*j9wa#i8HwL$96A%5whbDnIo{h-yWlnJi=!;FTh7H z`{Sn0_aNwnfsisB766RI*a2qD`|T7z?yZEAk&_Bs{h7TW=}lq|Q=NKi7plUUwV}RY zU;QVs8niGohHo?SwU_;ni-TImOq!LuImm7Sz2smlFE7{D)co-5K#~<_{)M_<|FA6S zdIkiPgqWD4?Chq%Ou@IDU_4mX_R;4I@6VNN>oaU>ze45Um2psB_iL{`ovWxOpgEuT z`Cc}7nJ-iWivU6~ z)I$ynDW5X`$#37|c#!95x)FJv(#S}{7XZu%uO-~L?Co1SJGV{eA0q|cvEGc1^g{4^j8f=ROkQe`Fd)a}E;3kDhG)Z?Ul zq)T>lZ7Cp+ab^s5CwVdjay~i(+w%LZF)n9Oo7c~-j@{p$HF?%jsHQVxPHa0f1=9+L zJIhNE$Vqw7XT53xtSx^GWSFD}RR)o#8YGRZmDe_sKeIZqkd+X5-^i7aFAbS(a5u;g zFL|@s-!g;=aSVq$xarh-WF@#oQ8-LFx&FBJp~RxA^Y+zk z9xv|ga}wlsh%lXR%@>o_eKT!R<=6vr&DB-(&zV5W+`CSNRM6saK8mf|Dr(@#K<;?J z$iNpql`nMVVd4ur971>U|ML}$EGyc)%P%(ZPn7Hz)^-zmP48aHFF{UDn$+bSO<`E}EjIcT6OE^5=qw;E9u}P+NolgI zOxfq$si3u#Xfjn&Z1+~O9Se&Oau&0>6<7pQf zk(Fsx9Z{Q>cJPd8n~XJ2{NuO8Bt#mpsTpH;bLKy2i{+|pmLuVn>|eGyy}9uo%e6fP z`z?Cdw8M6$a{4Kz9Db8lENS~+Q?JAQ*jO0DX4b*36Wy{F;lV6J-IR(NUtIT#(bWyI ztB*)%wFxpRV6~zn)18N-7I0}Pq%xJF)+4@E=s}Oi&B0b%3Tx%uU)C=(*h%iIc3`D! z-2}nXU*m1WO#sB_C%Hp+GcJqY_>B+>hdwUs| z$L(c{u6*HCjwgTrgIEL9W{WXPmA@x3ER-(mVt$1Q1V`zY>SLD6${c*EGGfVhzyJ|R;DnJ~x>qKJ}SIppjs^zqit z$@OP)*RO5?0k{u`-5B7(sivP=e_(C#CWmnlVIWZ?>@2e6MR?y@thRO|eXRKS0T-x5 zE22iwVoB!rSbLEph|&};UE5Sr0U_Jbpp{SF47-wER!Xf5z{r66k*WteR+a>b?7^dq z6Ver)$n%C9!zw~T4!3O;NX~ZGNv|V+NccIZt}zhrj8x6KNwnIiG#@%T_+h;}I>A%> zTUFT>qeOS%o9o0cAtO&Uo#Gih?qpi8U@~|C(O{xB92D^#ToiR_{1$YXdlv$55N|7?5e zyW?!DyYPu>>T$qB;dm@Zs3hxr_&PB#S1UH*Q|&hg&1Fw;o>Ur;O*7h|j2{6-MPD=Y z?|FeJJtAP%0AhBi*+5X&aK#fyZion>W2K>{cBP{Y>F$Q{R>??9Lui@_2RS)p;$5Ks zcje0GTF+(3cfVx$OyTt3HRpg-BlFY%RPzc9Gw6Du|7xK8{+t#azp)S3)%?12!DTRt zfChGLwB!o3N1DD5WVsK$K2Y>7y;*6`=XIgeMr}z|72s-8RRQ(KBO-S9)`E(=b|{G( zAB(s1<{zc;S2pT|hkq`C*D(KhJzx32e5|2D(IklN6gUFV%^;L53JwY?0Ca(Gtj#*o$>2j(Yg z0ort%7(8NgTRNj?nV6sDzTiOlh7Y{LtPZHi?^4kUp%lJkJ|SY+J$-2&GHNl39=b%r%@7j7%0ihtL#cB+eIsL->X>au%q=hvm@@YLgjt$CH%t}&acavw{5iGHkF6S9FIm{C7%NtJ*OXL`HghCFG6 zZ2=T1$pa)3Y2AZz2zP>qt=h8gJ3^xYCa5gQU7iFLjDX$o5^v$4H6fSDe$ZrSEW3Za zwT1cnX_k`(!BZ^vbIMeD2j8ZA(bH}vSUypd1i>bh5S0&BvqTA(p6|&TW)zOJdVfSX zGR80NY>%|v=~I>+4uxyi@szgeK%$gb>pG%0*a=)Cm0hK8IfI0t#mA2_suvtkrkn#I z@4)XZ)O7ll@7|Jh;a7vam+K+f+IC_aGS%;@qj-)VhqDN>eS96&nm6>Jmv*z8BiFG_ z5~OJUXvg6;d#EY*)Kr6vXM6~xc8yqe^b#lr)HgJ;tGkc7cB>1OC%0Q$_5|1SDSKmF z3!%OQhq|R{X=E>pSk}mn6Xsh8^IX{*g?q{-CMFs;WcA)m6SZ$E9De;=MSW;!uHgCu z)!>sORXON0sPqZuk}u~92r5>TH9B`6eQz&5XawzU&ZuA!w8`+hTyx1K*<@k!7rQK;zv z|B`H?FDzcw=5R1k3NMcCc>r~K8x0^z_|p6F0!mte2gHa~;H_cSHp}Zdryy)}KWC5; zlMqRs5{Nlrkpxr>+$~lwyg{CaP4o<<^TiI=>ccDrkaF6v&AQ%^f_ zic~C4GV49aBcAMG%7S8l;)01O$@UY`_rLmRWqN_ysf^WW5w4MS_|RjQD=x z`}A}BqUIx~li=gz2`x~=3`YPbU?gd07_xl34;35J0I=B2AriyMzX(Y!Bs@|)j2Zg5 z;~Or$or3~Z?F>EaL6EFOv0yI6F|GZFDvb^3nH%P-V7vLWByhO|Ygn`m+Yk1z#*3>T zSEU)h)Hn}~43{O27@z#|!{3WHBbz;J8qohLroTFqO01@VvO(X znmang-m_ilIIrS+LR2&_J$=N3KG!-^jj^$@F`pMEKjeWZ`cIU?jEu1_Us}Vj0~3YF zCIfM^@WdU76Budtdm?yv-@eiXc-|00GxzR^!oe;P1@+T&7!2mzxwp{TLacuUGNA>= z&#(SvVaX$`Y0MNBZqTlQY&;_)BSaWTJ}2-!zRfe5Mau?Vb?^>1BPJ!usXa|aM!4h# zF1-=Zc5vPV>hC*PDpw`VW;n`?+;b!PSQK)X6t(KKOZs z4RJ?8a_5C`9JpEdG;d}(mUK~5PcLPC5UHvvV3LzY<}uv|N+sPGJboM$_|Odw;bODh z1&6;G+M~Nnd6mKB5r*B<1W>f3)ZsDTpdZxFT}9t_j=2yHcRg+5dV+5P=q5gEKncL` zZDwPC)(eRv?FJ*z1+V2`zz(-#F`xMD~QUPx9m;1oT*@O>cPpV7h_N(H~V`|)DmpL4}#g&9-vyegQxzR1|fC`~_C%^2(&hQdH=ra?pf za?&tvlZK)HWX_e+ZDBZ1mYz)p$hG^twt%ZL(_I!QlXM@@+(n0osr%@P3m|K(laqT0dtaGg&=9jxlIqvO{CdNPe(q4grx~fl z+AQ${J%W}Kabp|GMz)I%qu#xYi^G89090T`D24mwT6sR&oj5yV-X3)}PZ11eb><%m z$s^gqkD$)^Eo(1`Y@vBsuSi({=D$9^zS>2D+n*>Wf&R=0M%(=Mu-iOVd9-Y0<|Mq) zz7nIy%I5gKjKX>Onucc7)QAO@G}_ETvSc?cq4PXMNY>VfajL}1qU{Xw9GX~+UdA-z zyha>B9R?GV&w63naz=|!K-SopwHZn<P&X<#5 zx6EG>fU_qpb3xwo`u3)#S?Er%7RhH~bMl7`BV>E?ps^PIuBJv)=tR|nGCc>FEyrn~ z{6y%IGKZn0F20wTp03=j%O%4U`@w~Ru>G(~xdUxoG7P@}E)MTFTEP)it(^$FxmtnU zfd4SG4r)P`iGs3|T3p#GNS8fu~V=rs{x#KtS@$*}C5{=pdhhKvn%GkuDN>O;nk)jZ8 zJ!7}jY~#Ea170;v26S-z>1R6&i*L|MoGd9bI1p`Q>8jRb%+AS~DN)syrPIE2D0_Mc zy`t+t%fR3{*?(cFh|NOfb;D7qX`Lpq7f`eMv9+E>jXW+_&m%Ebq(FCg?u$?nyUv9z z!fgH*n$z@zOy1E^RuEp^Q0?b@E)D64Ue>h>z6(~&9s(D@Kf+Gm(-O#!G?|%w6P7A# zYoxaw$^+U{Ec7W4Jq8=0s!dtpQPl0Q9rTIaPyx;crXIGau-S#~6&`*gUC&3~Ke~YR znB`YE?hgj7@Y_d7ZFE$R{_;L&IN{UOyU>bFP;eULxOL#`c^-OvRMu$_M8-J!z@7xl z6ZLouOYhygcL8E^pULphe3~&8g|YwO1j)}E)rl}PF zXBb^~>F(*L;Fp2Kk|&;0A_EUo-m6W%h9WWr-!A*?rH^rJ)1^upZw1vRg1Mt{yU*YK7+MK)V~jWeCXabSzNzf*pA!}PDx(}Z`qFEHAykcqg{N$?^us<64dVj`xfsitDfzOsp;-Sx-VGp`D&v6v`DTCjL8bM)U5Vk=##z>d@eM3WF6cQ}F z1&f`fuX)4Wpk4waT-29y=gw7wX~#2PiNRBDscpn0=)^(x3R7vwV8Km7M;v^WJgGH} zD>FWP_~1>&&@=>oL`z^Kz{j}qE{wn2u5jE8{F)T?3tTj{gguw@b;tc==s&=PCqusy zJoF5wA@ioWl6-;P8YV&6tH~4_Ly*}nmX=L(@8_4T!2y=E8!fja*5`XH5j7rG2W~>K8;6lV zi}8YE$p$=5&5wod8U;QS{~bCDlhbKRd#-$X^l=4Dx*>Er%1C953f^m$PtPKQxadmI zJqZa({QPLq2(79bvmewoL4lm+6__Acu3^aTO1_mb0JHJ!kml6|fx3Q6j+%Hq&#cKi%!`*r(l|@H;|JL|WqXfD% zMLJ0jedS8=yh^u&e0cZPSE>D7d(UoHDNC)UlO7Ef6WoBLi!c!fSs1B&v0QTYuuGQ} zk*3gHtC36S)F2==+S`H3%wfZ{H-dkjR=PgBXb@K~J+G!q$Qdy4wX09>Lmy#--Yq!V zannF^p>7B&5GJs-yaj|tTj!0jhFZs<7>xv{WURIktAn? z!GvmMuMP+L$)lQjx!=avB$N{>@6F-9F~)}(&^m!E6v^7G4%%o3uu9(rV<9kTnW#K%K4G~l|-G6Nkys#}NAb4XrsU>$kQ1$;LW3W!h9V7^kqr4Vc;ks8HM@QDWww~MJ@e4B&gJWP z76wwCq@<+C83|_OXlwt>Q>gwlOFiXSX2qey@s^CawL3)i>+fnYS^$#58XUor)-BtT z3tq7CKu5i!mNFOmiEM1;(-}9~ISueff`lJ6TTEfGYT}l8L?*q{PTwy<>-zm7d#eh% zu>OMT`E%}KgN5&*sdu=!hD5puF~{<~jQeqR0}0S=44Yn9g4M%}I7->tvYzK8V!;Sm z_eguTc(>}~{ANm>=~+-CJ(+H)SI<9>%VZ#i$lUziATrMm$ zWCb)9oR(sYueZDaT2r2t*>mtt<5et1y)2B70*{klPk9*J6`1ADoz*}VDOR5u%}VST z4Pl-FaUBNjn01fzRLVJddlh_YiWLL*@#Dw2xq~Qms&mqJP{|1_%#1o75`(nIY^!A_ zQ4>#`3?HC~cw9NaX_m(Qk^UHHi6$Fe+gU7Yg#wR_+M|NSlUEWibzJRF{8Hy@gLiq{ z&<@R1=HrK~j!?N+5c(SOuomqv@NvmmFcF7DA9c>~@I(3a7!4F`<|Qy!VYyN1bOz#u zhkKxIZ|q(}NXNbtslrzDZy_7dT0}a*W!_Gu?C9XWv0-$ks(UEYxQ6I5l^o9Qna8Vx ze>*gVctY}~e!i}#=)7$ph1U!aOfjZ!r zqfXtlo0RalAseQ(C*OHO(RIgCLxgT>=FmEA7vyy_t3VJ05H{x|)&d!@n4t}aE#S2W z@NR3u#tX_2V|lq0`jY~;2fkN=?P5HH{{`;t30vd8-|fsyb+*`iT>H{- zT+u`DzFcfBS`LDW%NKDv=3dqR1{R^{j|BE$?#T_{AU0AWkc5Mq0N6Zuo*g31@)taN z_ADo7wnnHsPVK`GwOV(l_(p!qt5=^DdNWYmjA{c@^f(>_wtyzTuCDGi8sr}+1f1*q zD9^E(`Ogz)U@;n>b0cJXt&c^<4aZ=4;^nEHOMXg88Ks*kVjMjtpD|RR?;=bF(QW_$ zQbdQw!w#i?a{0YPg!y4_Z!fK()2El^^gaGif7qHwj%HePfo~3<9Z>PC?4E}t!_!@}_3(u8HE?X-oY=@Fgwd-jlG&+csEttN2wkBgK zC;$my(T5J=-=FY7Osqt4jpwf-1(KN?Kck-WEf>1I5hS|jx4&}zEigL+rhhG&CMxdk z;y?aTawnRck4q^aU_5dj^DMO(L}u_qtQD#dPUC=Wm`hb#Tc#PQLNH^FexnAjw<>^n z;g~VGDX}+jXi$g;r1cQsopEC61rQ&+n~;No;BX`Wsvr9LW+W#+RsT>CKqNB>`mc|# zmguo^s3zJ+U#r6c0PV)%VhY)#oOV32a$W73|A+*)KE$TN5mc7`XV0F!rQxsm+~tZ$ zb>hCZTc(2#23|xO;xUxN#Q=#^9sg+MP7SYRl?;KiRTw;GKOwM5X-`~S92mwgLnaa{ zb5d=M)cMgVz~MR#m!>j2m#X<|q0nAc4ad5pprHF(GXa|AT9YhB_TrF4`g?5pJ6PRX zj!j(x#wkj|U8I}bGlDYM4HXjX=v4rcfWXs-A6!qxX8gk-wSlezgq#pqfj;$`nVAj3 zC#)tN-xbIS1%Mig{Mi<*Y8NlIe29liFFZwMeu(*2OHGWFxnKY$DcOCh{_6zTot;+# zn=}(+W09JT@DXx$fo1N6wM;kq<31Xi`VSvs6O2$E_Tl$0|6~i0{?cm5JPg6*oLgZ( z53tOD6$Xd-`T3O@HDnMF;N(Xq?h+` zdd2UAl7k2a@pCT+(gQY$XbE@S(jG9Cf;ajuo!0@*1yVzQ%L0#6I6^8h?0|!l8tq>> zLu(g23O+u*d_yY@jRr`#q3F&Z)(Qs!89xA{>ZT^G#4vbnFnW(N`c^L>B*tojg8Y!o zYQg`*Q|# zA=v_^c-P`#l?l}gl?k!!*JH$^Q=7yl+NvgCnHClXZ@mA z3OK$5Y5M+#iu}50GAiOpH=no|w9?ejaL#Boo5tbZh%iUb<$_eU>B8`;9LjgTVbhmVjVNBrl&o@4dyg#ozQR*@^5Su)+z^v}1Th!Vv1 zj(g6(u9JDg&kTiw)dupfVM{$OE(zcNJ)i9d+41YD9TxYvS45xHmVEi4=h0-UQ~s8A z3(?+_eqm_~Vy(8~7tj;uTsP>Mw+)@<55%TQTwkiJocpx@Cu;KZOM1^Lko@*Ug*S^G z@pgToq$9yuDrQ@iEq~!tKpQAop!?VjjcI(R%Hy6)Z(g5f!GBfyXwBdz z2hZ++y^giI=KNwob6=E7eTc4%x~#q0tL((;E5TtSzD`8AiJ!1u)KnQ48Zp+GI%{;l zoEkmlFXXX5^fdmR`gaRlV_$bcZq&}&O}Tfuaxf~iVc@sZ0oZT1e{b5aE~(I91HIjI{^&K-~-p3z6Uor4sNRLgH)JgU1UDV-O?1az8+EVIlY={2-95GIX zcj4c1iQI9GEcI<3t^S5FrdA&vjC4AMCZbGq^t5xQ>x=!nNX539+Psr)gkvW%FFVdC z&Q-_{c$5%^0SH=+L!h8U?y>-8Q%!|bZOC-WuQ~I@8!77iUVMg+%@vLPAQVpk@V45f z0hDBIP9s#wzx;7sC^?Fv=G#3@={#|FB{$9Kh~!yML8~r0t)QB3XOM*z;J%-L$Ipru8MFDdbNnQLf1xAQe{62#4oy38C5$^sDXIcPk_5e$dKz74ImWd{YLxh-S5)c01MtC>vn?O9O~^ub~XV zO{{^q@vhd<2sf~nP@6-dE!?3LvB~JwO7MwO!!0kp{tFfa_OZW#5wCe*I}((hd@1y) z{TjeMW0$t>DLwc58KZf}(n1S2Rfo2a4F}$DAn!~+!h)06DCg3$yWl*%8!l5NceVrL z5GSxFH{(32P?DTQb8`EEeKD+&Wxwk6w=G4bG?O4-<3#S9=%?5 zd*5WsdD|dcFg)5fT#ViM&bA#n*5$qoA^Y4VqN7$IP$bcXMMp+1eU)5k4Sd|7TlSH8 z2yuM%SgJxVnCvM80B6%QG*x*Pj?`@J+o*&og}Ne% zuZ(lptYpZ zDhK^rBdGE9d<5@ayTY=4ETc*L0ON^CkI##U`2a?KJiL~W0GGT_1ohS7vH<@#0gXne zT`g_-a3A8K9;Od=Qx)g9z=yy$P>fSHtV?AWm_O!QzaK zG9vH*loCMp9LiH3pO~m8DQ2N~I^k97r&gCFb=i%Y+J^uOQ|RF^%+Th}NWUmz#PLeU zJ+>|@biUDa6>At0!1S!J-)IdVlbw7pD61H9c?w}4bR7q?+}phdG7|a+_y}njSNw($ zocFSKiu3PHO62=*-@cvQ4I308!2_E19w<$^$0HA1Wv z!2!YAN}=P8qaHJ&0;-XGjWdNa;`X+w#3Rju*M+%z>|_aF%?qdys|K_4_Cp!u)(88Uf;1<3#q)dKDgY^ybE*=?Am;#M_7WjBZJ@6X>ao(i`<*Q{k3Y9Cpc@+;jPegsEZ&}y^xh?EzldzB;+cyR$X(MHYa2#mlslOf zM54>J;4Ob$+yXZv8#6QbVejgDhbTBfMd3?r!~3?hbm!##Nh4?!A|0VTW0B)Z*CFE6~`<=$~8%PXtQUDT%D7%I|EXju3lc)*I4 z(BPYg8tcI`{hp5xaBiUhM8HZMXAI}*g4(#!t*D!~UPNNJt3VW_FY}YgA-a5Dp_$_= zHZJ?VFLL^G9GuV!9S$WS0RcJrKzkV4lO{Kfs+u#<(Qu3^v|1Dg-c4V^FoEj^Q#9Qo zICC_NKbWFOg)Tp|!eM}`$jSMIfqxKG2AT}|DH8*r*!zUf=s`8?ei!&>M!R{_F4w#) ztI?e?7tw7kg$50)a>Q|4ecg(-qf(12ad0b08OsJumWhnD#bB8CrI?wUYsOGRS;F7L z=rc5SL}KN(L+`#T*VY7}RsTNBJMa)`Oc|*X9WIrFW1zsoqhS)}r>1VOPl0jGp#r1U zXA$?_YU>p5{R)tQaTItOvqEnwDk9=r6a~;0iC6Qs>!@`Kg2H7V_*rz`iE{Yw2Pe1Q4x_gaYoT$ZH8gkFJck^BI?wu$Z7@C_5PGrscnCc zJT^v!&vn|@MDrwWr$~$)UTt+m24>y6x7FN2Jy%&Rc$+=>!QJn=ZF+3JGI>F<-RtD_ zdO?*#l9#>}zNqKvrGpJuEA^ru^0aVXQGvtjmABB?6%mFHW>vj~4oG|v0>%6ZWdRiP z|BeRv@;?9W-++ZAWvd+n^w03~aam*2&7dcm;!1~-^``CnFZQT|0(_C9hWhh3!PT0{ zZxqVrW+HHEXlF4O=OL@s&K&D!iV+g-Z7x)4$h(P=nFdPL0vN34Q@mW?*UxE`H;1G6b5Z-;< z4J$vtM3Y{oLCfT8;~^f1Em^Haz_cHBUYE-~JU+E}f;hW*CKwaw00YvNI_&XCuN`mn z@EebW#4zfqHZUhz55MH{fOl8*UpkB7o|hAOX__iXTbaw4tV;FW+5cLj?aiW zgdEuh>O1j~BEQ+jbD-IS)nl|rda`FHP(&_v=rNq7+Rv(74(9vfwqJa*)S&tbVr(h>l$S40_8;l_F_A+l=jOgfhd8B5>`yUF19A@cZDzqT z`+IiL5(KI4P}mOC;G*$_UW<`290&V8*T(`*C@PyjeUc4QEU4*9O@yhrGjhii_UHJ* zCX%2S#w0#6F$eD!rLPby={9@fC-&!k4YIHRD0)Zx#-oG!%?sFc3{D|I$D%9v$0FH9@?Lw3P6grR_a!sj{Gq5uF9%l3qH#)oNo*^q%OBqc_v zO^D{vFPA}0ylA|V^VmTCMkXVidEc$xtF3o zGj#^6qCRJ)!Y*k-)~Bp?j!W;!lQ@_q;XJ#tQ7Kk>uivYk=TEa@;$vf9&o7$675=J% zo^N64jmcPF`LBC8+zz?4xhk_jYOepzj`%DW|6LD&o&&`X@yxIC#4nY_zjGmfTpCDb zPxSmyA^xc5U5>;-TE+xX{7V7I8b%4JXEiheyGM)QsXZ_FJT@uSygVbVC}YpyAbu*W z?Gx-zUiP13N2{EwHxy*VI*iO%J|XiW?xU$OQkq@e$tfvwqx+H9hQmp@2&}@QyY={a zc-~D@b--2);%PVwaEJVZ8zRX!6i5jU2r&xN<*pM-ke(liAqKT>QO{xHeXz@S!G2d4QLGk6oa&7$)iXyWfO=R>gti0;^Ku1u`35&Ep2afm;yq8 z6afpEPNp#&$tV+f*H=?dsPV%G0Jn%h`xlr;*RrJ`XHwK^Rw~X3h=|MsM(NTCBtthW zTCBa@FkM66X&YKzyM{v!W~k(V*{`i2F-|%*PmwBPKiU5QEZ(cSz=uhHSvurd<2tpz z3h)Cv(2S2d|Gwwt^|x6=aCihXDJwr|YHLS}IrA|xzIOLjHZblCu^f#{NJ#!7kk08H z>F>|P32F#AORSRx;rwT6Y&yD#=LiQI6I-7hQ^M6$1Wp_c1UO!8xK~U0@=R$=8 zhId>jdsw{P>~ibC-JOR!R-X|i(fkjh#B1aO3#Z3SUbg^vaEyb(8=6ih3c@2I^tH8{ zTkZAo&VAku)*G_=)OaplJ=_fzwmuIgmxQrfJC(QVk)P4K3*ib#*u;}|NM5vk7iW8z zGG*%$E<&CZFRCb>;_`Z_A=R7BY7I6qG(PK{oL^O;xLkin^?M-gDyg*x>io+thHxa! z*r>viBXY=nBX*;4!8~&C7~=dgLfPst1>G2k;VP9`1aiOb59(qu1!JksEb}?-6>B;$ zAO-F-EXRH**f1MbLg+!W26O2=U1kyj)}(lqHQD)~ZtJ*qo&u_A%Qw3Mg;o1Ug@bSkj-f7EQ>gyLgfA%yV=xfHO?MtQ_VxipFNgMZN{+TK1P_b1nnv*A-& zJTF!mrh58SrTC{973Oo)!@M5PSfor}e&Ha=9+HZ8n;QqNd1~7yger)0v z?;M#BmZ|m!uA&Xi%}`2m=vwF>g|h?Y?$&LM&5pJ7%VF+)uM#H%5Bkd``{$OTIoX-R zFYu8E+kd)hTBR0D`kBhcf z{w?uRQ&Sh)4MFPIez}h?Gm)}239Cq}3DX?e29!2PUW*O4TiV5lR3uv^BdjLo->*X>h zDW~^WGr6flu&EC|!Avd_ZBJvnB4*rkIKEyd4_mg-9b3l=htT-lhxsv7LnN$@+i4!g z_NZr;j;E(m&9=3x^E(6&d~Z=dcvPgfJ)4}ZFvYzlkK@ivsh^z7quBkuOht$j`|kvPklYwbpS zu?$wbvyO=5(U-)1MR;XCl~rCD1uN|N&o&7*EfDqAl?)C(t-pW3w{^C7b7H0g<)fJ* zsrWb~{Pp5fYuN9j&_*DS{8j*bTptrUKOw`zLZzlfC*choofQxQ`NHJ1rHW)=Y-MKZ z9+9Z=+j|t3c|_nuRrJcd_7CbpYKf2-^{Qm|@-y}2{g431s(G`!$5Oxf7Ws0ei)Qo4 zP|dod5ug#N=*B`(g+&%gaKXX^s?PI6(lTWXkr1B(mt|Er#~LJ}_`&hb;~gSXJFBHm z)WeBpZC&?wQhYK+7;~c7bjwu$fFV|nRYE$!bM%mA|80ZPvGvl?z~JD@oFOvS(*Dpw z-d#$7;*79e|9dYgiPK>30o=000UeASW&nM!pg2>O$ zw6Gv;nqnyodNfNtW*ovE`c0Ldjz=I{`A||18{6 z0@us2y`i!3!>iRG6quflx;ng7cVRh$r@naYcL?kzIpOc1!35?c=$sp$KtSiwAM0)W zF5(~qLo^Pjs;(}T_%vXx3z&QR!sT` zJ1{|qqs~cW7Y}mx0oV?04GrYHF~a?*b7=d7GmkyH2a3$rlk30mnIH>x^JlAU`$D>28Ac#vCrYx#S8X+r&f6OLQd(99 z2Xosw7#sv9To?R1O>dQyl)!R#hmTCNH0=8gtv{iR&@9cT5W`%Ts+YrLL}jgkxQd&? zZNS}Kq_NS{YljF&DvT0o?GJ+C*H5*~0XAUBdSM!*IDx}+RA6A7F@O@!!_FK0;f3-e z3jy8+mVhb}>AOn-L;(;oFN1F;CSh@CVh&>rq6YB6*R6A4MV=SZ#yK`2fy`YpTd|fT z!mAKce;)OBPdjHtR=s2S<9%=xga+V+)_>9z2$!;K znIgCF&au$;AHYhX$Z{GK-e4xEcEimeD;(Jj#dc`L;3#7lVr;US=Yg@w7S#AlHfWd4 z{(-U({UZVbXrdUy{)rBN+sWc$^o;_xu)jgLql}`<_X>M!V^X49`p2YQw8Xl+ED1-( zLrK+lJEM$}qMm1L@(7mvV%pI|CROM=;Bcqp8`~>>_&fZZEQq>=v{j|XJnHcq@s?PW=~qMO{KfKQ?N7d{2^C8C&anbYNA2oZ@~6wJAVGt%2xgTyXM)4#y)hyx4e8d zT4>gpkgx04T!3lxbkX8H#e3Axqp25X3|K3P<- zW%9$uBi`aCpP`gU_!k0<*++=3LGA9puH3?tVf??bF%i@D_#BL5L8a6xH|IOlx|5nT zF+GXh-yWCu@!Ct4D;OtlxnEKJG@{rSd}Q$3f4J8CD#ENen8^73=3t_pYE+>UAg-N# zCyR(_s}{aanfvd2%A0JhRX#<1IcT4eahA}Hs+Y)0_nTMBuW$NS8ifq4{3au2_?vCv z1M_WnZ$C>}4z2O7^`{Dr5^uC}rQuGS)$hbwt@2YX%wnI@#afIdoku z_wzjO`+5F)uYa!lp3BUfbDYO{9LMkX-Bh4I=BrM+|C^lH@SdMYjEs!T%%0N+kT(Ux zn>b))@_uzLi@a|Kt2l~g|F{f7DTIvxPJYNgzp_?ddj6!fO#@9p84$A zv%_`xW{0w}6WrWg$c}a8O=@N)4JS%Te4g~alXhdB1p;qKMkY#9pvaFuBccOYzgnvx zEib-(Ob0r1s)&;u>2l)MxD1Q)DJWeaaU(0|PnJp{>)n6+3eL>Md69@Jq=P1jZ1ayt zAE~nqj(g*J(yM=yQ*7$Sm-ttTjE#gOUy2=0<3T7b8*=nb&3=6m{};w3*$jwrNjcc> zx=_7dZ=`#J3I9Lblvg&ta8o{xG>oi>e}3iu%I*45(l-D9CpU%ay|P=L#Pn{r8nm49 z68~7!fN5%K>VRqgw{KvAAP8vFEA;iT#QZ_1f zR!=Z{(l{rB3HKacA@)RgA1}?&$(HqmxN|oM$2I!~F*=%l7+||hj{uRNd9$k}lJJCt zo!D4~N7BBs7EUdhymTpo3sGN(zms4~oH>J&y!Nmg7v}qrh zeS?_5lQB;jW72r&?8;gONp2G&r|x4voOP?g$fY%obLeSk*b$mIBZFRupP9Nme+&oS z#B>w%$PA_|P$Lt#+sZovrfN8%0mi=w6NPPtDdrI z%?x;_e;z@Y8Mkiih`4`m{;6Bw<-{(vd3b8H8iDIgz9*21it172`XzeNPJ??kn_5c! z0Q66R!L-<@CKcwz?A%L6DXyxZoN4BvusLjsu0Yf%d7m`@03=E<*x7~hp zP4(7S5o?4o!(cDB=H*5tKYY<+$iuxZfp5$9V5!f>{=r^%_mFSXf4rYBq5ZH4)47-J z)4h+2tO$)-e0ER*%>LON&%KGU-I`HrdDCd z!*p3Jp~V^#mAqU=Ie8_FUl5(&zWPC(E$X%m!9(|lz7O2}*URbQ8`6wJWbMQG(A)Tx zCo``BJeg~UU=7mjKMoBCFj6_%NHS8PLyS~n!ANB+WNb>e9*k5H%gih*B)*2KOgM(^ly1TF=qh^AmD^kG~DkCM2bE*BRta1jufQ4CST{b3nR z3uhLzjn36Pzo~2)`Jw(JjTDy`Xopt7IH-bG0EB|ltDRsq|D10i)o6vFO+d&pP~4`J z2&R@?wPeV95q_(K9oL`hNmBq&e|l00%!*U2)i{C)j*#66VOs(=?%)eW&^6Bb*g}C! z?YbnIaHum9CQwoP=i4+@C5+v<`p3p87~*^w_w+~%KH6|o0peot)1XAv=oFrd@yS0@ zGC!Cx+*3g=k^>&pHj}_z5GVt_>dhX; z{ZcE#Y6C&+xhW^iBbi8Jo9#4VxG*zbG=U!XcDNcSG0?+;W&UZqb6suC&0!G{9C?VzNh@V`aj`q_DM1@!X<-qp2bSnwSnj+n`rX6oFYMCd zR;|DYp{6Fp0h+78MoHHLok>+)9YVqDjBCvr546bcTkAo_8(KTmF4E)U<3cf#VF!{! zhJetdHMkd~V?aDf0G_*su&mdK-vsTzmJ!J**(vPG1{^U;X)WKwuyk|BJdzzo8D*1${c_ zRYjJIiMQDwrhFO!Ly*_bV1oD!7(wih0lhmwmt|PytZvi4d3=c#ptScF{ZF6ZR8>(w9s+(;k8? zdhi6yZNx8Ry)Zp9$5KOQ2gIw+RJ$ui!!%4p{esK0&{rSWPZ@Ol)4cwIRW^8f>j5eX z0C0N2EKqEx6H89?PNM@G`X|HsN!%Oj30$69gM*#jG&G&8>Fl(%wN+JBp($!@onF_C zhVQmg<1)ZL|Aj#h52Jci5c@Q@VX+8sf|vKvZiNId@<4{=e&)5dnQ|kyL%R3x-zU#a z25XSHVYl*kp+N<|%9@f4&jIl0EWWU#oxOkvKJAz>G>(lMAc+qinn3D9WRO5BW@iKD zVJSp9GZrGL=qsJlaFswiEh;JkYR`@xJH#`ZTUz!{j(pj82u6ICd+*UGieHLlyhKFj zvEH#I)Fysd|_v>c4 z1Don2@`;;RPN9@GD=R5AwpKO}6=!ojIdq~0AsH}b8OdxZWJLaEw*=(^Y+-hOs{t$? zwxH*%O|AcqixDKP1V>W92!k=J4ag^=zFfdO6bEW9lCRg*eS6@WZEfX`(lQ=#boq9 z4G573WZmilxbBxI?TJ#wsLZn zx#6e4CU16W1rC#Q`G=!3W5 zYX`D}>9D+u^O71{j3GWR!owkjLda(fOtFm_C?Q=1#My{r0gb{B`;HT|S(W<%PMC)> zmUWaUQv!Z1(|Vd`2J zFAh5-szf=iF1thqdqII}A!=9v^ZKGWV3THHK+w;{LxN?TQ(2)lkVC=iB3w?&dGckY z)@zM#AQSPo9CjPXxA)G0xQk*kVrSu=M%D4QcdU@|LH(wrWEJQT0OO1YeqZ@wwR8)X z#S~Wmks6z8W@goofw!b_o{0!C7*<6`u84^o9)z+mUKcN`Q>Mg+tp#-hdzxbDGRREP zLU%2Qz$Y>58y&U6cvxyWa}^(3^#a#+*!g|=QA#^b#RP^(AlyslC*YH>F(upG4vBB6 zTY=Aq;?!;lIY{)eDk?1gs;$ub<(15FUp;N%uP6fOnsM3J0w1@->a(c+=DnF09yRNT z$U$x?nX_@G>tt8hSJ`ELvWRRi@o)piC8Q>qc|wEQu88ycL82m>H4t&S5W}hRH57&y zYCGCOAvX?s1luwRn*7i##N3kI3p~B@($Z=dA3_|%soa}JG@nJ*z~Yk2ps>l_R#sNl z#KfdNjJHgQZ9d-?J%E226tHBDxpEKeA9Sa8XN8*@kj5h*E06znZyDL?W5m(pdDx)f zF{}*s@wm#Kx09x|H355O8Eec0NZos6J&==?4u4Z z;|?f5k>POl^jrlMIsPm=RY9c^&<}R2MhShM{W6{TgbwZvJ&%4+WWCgyex{z0QR$WU znvj@{D}eY8jGkHdDV9D4VVkFTu7F-lt~It==|hgB zddL2dr2w+ZyIATXE2;d1-B2Ke9O@ldM?;Xv777s*v#9;`z7O}&6CbSW?W-NN1_fiX zn+0eU=ZeP&kFBl(H3^(F$Yv5vr92i@<<9QgGq;*Fao;fi=KFjbRnD!WQ>T@N#osoLNz;s@Q+?Q7}BAz;?OWQ!+N?+CKA=E=&9yxS?Kg{ZzvA+`-T> z3l4HUEO&Hl+5yi7PIECS{p8eo`Uylup6yCfs$2Owmu#LWE7Zj!BYWy~iLS#<6%?FT zM0_Cw1G?Zy2ncy>P&x$9&A@>XfH{6R2njfi>pS#=)EJgLQ`zZ6!^;M;@WLG$YH9RjGx3nfB9*7JJi?8p-@mRPO8_tV=_u&dmT2*`h<6$=q zl74b!j$6YPVFtXszD#f~^T_5-?4`}J{#X-|(g4-g;T07VqFe+6P%w@QAn_Y+Nc_oI z%;MkzxGB70H+cR*sSi$c=Ua$DE=c^z#-!tG%|fsA+Si8#dV`CROKD7GWP4|4n$1(< zIMAgO<>lKTs09f>0nWol_=)X}8_yxgN<6MJBhIcq%(mf>lwvxx8C;?CToiU_HcK@t z@9flH2~&3n?t_eBAWZewl|lyTVpQxUh#q|EruIVQm7~I7`qkzf?eV@w^j1&?v+=dx zj$pSAY{kYO$;e_r-eDKS+)VbZhe&@G8FOCOa zgT>Fbo-)W}=0xF2UJ+Sd^du;`R@c@5}X|Dn2U4Gk96pgHO zjFeZ&>YbMF&QaZ6T?W9O16JV;`m+&1i(}&_Yjc2QvnaL<%Q;_MNr~t3KEMmThT|iE z^khLtYnMc82b%qxiNW_I7Z`6qBqOv?(MA+oi;uyKIew@t_3Ex(#MUAfY%SocZA(|? z0gZ%di6mSBXa!!%s$gp&L&6<49np}^0xKQK(-IQVnl)_rUOJM+^|^R*3hJARkv^Sy zKFV?|FTWR^lcfJ?BzELR@ya|-xXV8D@h3=cnE?qNVo|1T=yE<<1~J}YGo6g9!iul! zjyAp97ie2Fh6bSrmr;qn4Mb1!H!DF4`yTyy!@&(N>4&IA-Ij{b3NVv~gOlN2m&gs% zvLooE9vNWx3P%gBf3nY|S%YqGDxr;D@9wX_Z8q|lYlf5;SP9py#$X?$kU%*(I+iR9 zMlFXRY}!pn9O}wKz7mX324qh zj!mP-c?E@P&|yS}ld9{Wpx4JyUO)PL;Zz|?92^`3mkiy{0F=X7?({z&auIP14w6s1 zjkF1zobsMW99(F$P&mh!fh65P62rz=vYE<3APU5Y5TC6*b%V&60IKg&=}Ii$CM|yv z{gZ|z2gm}z-8^vH7I9>Q9tma4B@vblr9H9%y=Ftj0v#RvZnXp3Cpj%44Mh#d4&4vA zpJZpm#^@;rrNJq z(tl78|6^)`6ez%YR@}()LHGtFcY5Tj0F5Gj~2M4H;%V)zs zQ?24(ahl6#_uFsp=%_J;yb8lR?8DVK;l(d2&Ci@iS^{Y8(l|`_g)r9=XKo>)9+=aW zuF{uKE>jtMaaP%^HU{nAN{Ka6WO-J|N3LSs(G5e40kjva5sC4_~EK)?}Czj^MTIv55I z4<@c-UisD9&ON!!w{3~ho>K&Ox%<4f3H>1+5I5q#OJLn@|KGfVOwS80eWTqp$JL77 z6Gs{>Dbe!^J>U0etIZSG+3(hHuO7tAjHjkXrqe7bMzno0IX{SVnoZDeH?N!Rewa#s zY)!A{&EBX{-N~?S`Lw)P!O@OK*CT_aqQemvgFh$Sc=TgC58v3a=+l!qy!{oH2QPZK z>U?|mNgIP-V4kbfk{UlzB2@;lBTx2~G}CMm@m;?B#I`;!!&9JOvc!_uk~VA5X=0e_ zqGT%~oRLBNJe%mCu>Qb+(Ip%HmV!_Z#r}vBpCNCg*!A;}M9EYu#bpcuhe^Co?pfnH z`!E%-`Rb3EU6xDx1_p>fo}{gOAl&jYha;WR`u+$eB}Y(E(g|~JA6&cTGY4{9-)p<7 zai-ozqDCZx>hjR<<~xOYYVBt>R|H-hk+P0pBU!X;qC9;@nn~h=rF6@XvqXmB(i_`y z3@`w#G^5jmJpI~)S`_g@!3-+`?$()xV%gErefezbPn>)eDB;vICcfXs2n6&9cm=l! z@+zT=8^koT8-$%6CpKpv)h}wvv6c?sZlKd7c6(CH=m%3)rP5W~AFdOD;>kvC9djy6 zsdsNtpFZ;Eih)n1e{Fa&l}K0D*yzq7RLG8h^0@mpI?HrW1rzaMI%`pEq;!%>xy2ei z@qMK*D=o%ti9W+@j1QF;PRxke-6J+|&7kOm5MWslce|b%vc8c(#!>J_y2wVhMdYJ@ zEh0#%Wy(K8MZg^mS!|AO3Jv<4|9fLAC@AvhI%v+aF^=#-qy-6{^VSvXig4SWy1h4b z^K1@7Hv;~NI}MHye|^jyLpXW;>jd=QuZ8Eo(@x9KNX$<69uhFG)vLpIN8CBHt<>f; z%LaMt%$%&gCK0{}`NG}l#Yd4aVr!YJU`Z_Zq8fukUfy(Idx*OPJO0%NB8hUf>0aQU z3uznaF*3_@~`~JVyCenqhv#&O7KQArmIt#gk zM(>Qv`|p7r>9E-~yNUiY-yzfwgAD1Bj@+CaXT>VoKo8Oz&t+QU&@PHqP&Ea`m(J&A zhLOE9g&wuW0&==Q-^>C&k@bcx7U0xnE7lKT~RiUU8xF~fk^X4DJcp(l@Z&BeFc=Kvs5wEgI6ESJQ|-=Chf>9 zTqv*k_G_(1UMt|`Wr~z19!o|m%|_MSc1vK}DY^Q?L{n75^5DJDG%=HkoeMLit0Se5 zq#|zB_7=hq!KxrPFE6!xwO?x01Y89`eh+Gx*S9ReFymDx4;CPf9?zvQa1}&Hg*78? zXfZLXNGF&xa859=UJlbX zR8UdD%+!g2MWG4F1!CNPisHR;piR*b6A5V#G;_TWaSxHT-BVFeXotjLnDq$#HE<4q zvgxM?JOPP7YE_w-`3{7_i}g1}=@1cMeE|{v6nB2JU%ikSKe1TpwJb-OG<^-ohs!$Z z>Qjp&nb=yVl9|J~ZLERfEMDOe5vf~eTgLPIpTsWXIS78A?Ova|j{BU#TpZTSjy=t8 znrLR_R6Xn*a6++L^8^z(mPRW%oj&vWTCB&VaU|W-=W66aH?icJ__1~g9RqVy-*pT- znuKAKlQ8U|E*eMZ_rY-o{fyC zbX2Tz<@Sh>BwqlDz0N9#u1CIq4~m47y~9$H`s=1KgjWD)I|RHy^4@82!cCrkp>cV8?H;tcFW4f`L{QkxmJ@Jl{!B>M+$m(a??QtL&vZos=dR1~9}M5cFj zMa-k%6Ob|p$5ojh>Q}TY2;Z z#vd7~k3EuFYwT*n#GsM)f`Mr*q;9uOAeQVyObr-_Jtikxpwo^KV{`Q77MPj zDp5iQGwtK+C~8UNpY#x5 z2{E~izJtdel>acENvX&DfOB#ko_iqv^A=Cuof5zxbvRUP>>iOknPwenZ`vUs^fmy@ zghSe@&{8p2AIyAXH@BkEW(XknKT&9<61tCl8%^mqxCKJi%U~yy%$W7&l0!LH<2{HE zalAG^-gUyO+k@EEa`-LJ=)1%huAhEfPPk-uy6plRUcNw({uhiFcm?72=$gKuWU64=#*H*;5L_{>r9e9WXatAMWi(O6x zx54GN&>cbA`!dqo;z<4waQJppse=AS)+`-tIxWbKto((znF$Fe5@$uWDK^tg%J#z9 z-UCve?(kobmtdF7cvOOAxcUBPbjUh|ZM*EO0ZXjk&ukimg$8?&+KFH8x^xQFn$rVqlyD&^B}ueSnz7Suq}1=mLirlP`?fEO+0oH>+s%brpnk;~j< zEP=wl^SRyQbDgLhrJ}5CO6p9UN#nr7!Y@ZEiK2U;Pq=(F)^gs zZRcl*EtE?5{9w%s8E+^pp)e>YD#AH0Y8k&#jPa#DtP!aRk?abKVUYv^0lX9sbAkwy z2RL-F<%4^8ff@8-35LXhXr^*@wvh#BV}c4Z=0s04pq*$NaMcgHc=4j$1^(CC_8rXq zujN^*bp1)?|HCdHu7e09yjZ`yybLx8)d3(aYY~3JAguaXen)d43-?Qw0eD~_tKzu8 zw5^PcOd0YmO44XdSH78x$f=&@=6L#>@Tn~jCSnhX*q4(W{yf*3y0OaogEMu`YBv08 z@WYgpl!WsRXf8yRAyML1f)D2-t?0TiKom2Vrd0#Kv7@k$k)HLjnBd^6%2lpp{pSk; zsPZQQMIei6RGF(u^sma=4TecK|K_VF zFJ{9-R~*DR0DVk=uoO*snw@4PCO|PtZ6451P~9yzZf) z`z=nASx-yrO-A{}^>(u5hqR=mAgOpAaUR>HW2&ZPkBV*>I?e&i8*+y|2;Aff48|&; zAMW2HgB}mOmCXVTWZ4p5nC-um=YGf3s=$EMF0p1NYt|AkpOS^<>ZMSkd^UzR>Xb48M%=+aIgx8+DAjWGN^uWKAphJ z0N%s%=g^5u&CVNJJs^yuQ)cjXNJ!1=a*TR2 z0LPOyn?8`~k3rjPqF^Wn7+cs{#51TseGqs)XJ@a^ssv;L0j?3;ZVI< z+r7yXDBJd|cq9=Q+=^U)+XJ-4*h0)u4W#m3lYBl{po>%-us#k9FlH6%p1QIexbMk! z1RRFMK2xPPpEOlTKHm>NlkjT6L5-j2bkgx{;{118k z7WM$`Og~B;3v27<9*KW-^rS{2-kZ32$L}`;n7*W6OtSVP2|JMgyHSCFGQ#nHSDF2+ z5lBB6{Acm0$nwec8^7j9s+nzdJ`l50lmM0y6L|Hy=AR?UUmFGfZnN3|CgXQ z*3G_M@9>d}F)vPDy?cv$M14yq^N6f64F)PL&?mQJ78e&G^CU4ozCbEYGeU+9#O`5B{*5U`c@40QUreYbk7{64X7kCt$|B&tPyj=E;}jPerWNyT>b!OVxHj_EuJ9}R)aLOJP09j$U+a2Zn$MW*f6?%fJ~ze`^<}TiFb&!8ca*C_ zqyw&Lo7Tg2)>L^NOu)5vhY*ti&AM?1QHY7z>L{55gfvE&Mqk8aO4xr7s_AQKRH@JmFq(d_!8PBEj+<({Uz=DAAv@Cz>JDE1OKv<=92}LhbRFx zeBrdL1yAJZo4wvSDG`q7!i1D{$Iz*Z5@fh*ys`-IeX6K3gR3cgf zI;uAKa;W{Gt<`JjLM%ow@g=1dNxT066aPn&zk!K+-hL4hVh8(KZWd6p@~cz2%KBEhPvy}A8Y1i z6K(8z*b`~(hN(5{Qw%3PuM->{j<3Q#yLdKwUaI#(Sjk%n3F^zY!oY+8L1ChUFOI*&+^YNsMxHHG(Rj|4%*Bt(vYNrtW$%cXU4gb;ZYK}1 z#vPWN0)(=oBr!+AmKCQS+2~w%sb2nA z^9(xmMArSTA}25d*yetZ=aqDFM81A%5jT_S9UQ|c=_=CiC3?}!Knh<%Ix*E!-#S{^pkpTOmj zOMssTfY2@KgT+MV73e+!6}FT${-DTrrGT^RWetsKu#)s zBWU`01Wi9_vMfzP)7K^W(N5ibp4nZlM=CsoB-KR^=PF%iT&4~aIt@*@T5y5WElsn; zk*011pzmXR9ge;*aTDH32%21rbX4=8bO*{BX!3n0%#wh7KP6#0Ilf~(C%C;4gJym) zUNC(}7R=lxBn3#E#O8o$ReL}XVUvK8tC=b_uNO*=5cz=E<(!P}^>dxexdH=>$3(&O zK9zpCdy)vQ+IBU1un%HYlmYb7?j=cjX6PowE>w3YW!;JJV*=#$FSTw ztR+HKnF=lAqbZ)>;m+e32I;nGhDg-`s-9eHXI0Za_oU5 z*<|ArH^G7^@u_OBKC^&>omD9)@i(!Y2WsLcXcZwY4vmM{@If4SU>EnQvQl_VpKb!d z24pf@mv(MHvKL-9?cCMd{C3;q@Ohzl&sT>wZ910$d*PI}GFZ?7B`P{PI){?-wAOmN z|3fFvwv>Cy`GXH7t+h>l-vhuF5qy4Kr)4b4rWVO>28vL?;u+mZnlJC`{1y#trx5y6 zM$>s|P$wm@?z!+=rMvqS1STR$N-R@QgM%Sp8W3DczzvGP_#d$MSI*)P5(TD);I*@N z|NasH_n}7n8_4GapF`bfQK6U(DE>E)|NIKmGyu?6q83Q}vqIJO^xr6vN8$ibMvm;j zky!`%k%J=SGPxoEygS6TEwGdF&(4e<#lx{dElNmb|8*;?H`yfKG+#uJn3x#Ad+pF5 zPWc0-hlDC%suJ?hV5Tq#vv&0xed)`nuOBz4kfgu~IMn&GnR+z*c)(zDVJHC1B?TcW z;~SsgA8bow7SsvN1m%Oa7xeYH!q@~-Vx9#~x!iZW5>sd_X+A{Ht$R-FBy;}^{|*50 zS)F1=6_M@*`~;}? z{yxy1hM5Vw-aBw42DgPocG6g~;j5IY#sPJ981I7i5*QE_W*+0@)PV+SV+e9rHqqK? zvEyl^mfya8dts=%v$GRXtS>-F7#QgN^C3{kz}83m$YC4^W`yzaOEdheUZUKO9{wEn z4GJm}ty)k32@gc3nOHkpclY93WGjHvon!oC=;f=Pg!3ACLg&L|JiyN{TcxVyFN__~ zc%UMGesOw+z{enIX00!~Vo}8AtlRex$rb@*X%jr$PoP_K;X>~cOTpI(BG5OJx594l zEIN8D=dZs+8@UnqUL5RxdsPOZ@Z}~N6gh^4hyTZ)(dp~c+0pSFO5L01Jv}|4AM_Kj z<9oUe`9Q&g3?HAG|`7+2S;xhwOp z^!BOuxc?ygMPZL9NGccERBpYSR`M$4%EVxzb%*}E1_Xm&Tdij>S}d|%9)PaDYyoN9 zC{F|ZM46sgAys^=C_6j!F$MB#Xzi3aOe0s_Y?rgjiBrEp^b48vwf+4q>%aNQoKKqc z^qS`}F(H{h+6FMHlnYdi@in{>#UlGlLu>z1Gu)zGsg5Pnwso$E*gc`=s(q5dc5yX# z%xP?v``Lg}ah)*BD<{h_F~*45kf7%KMLQz8m@QGi`r;#75+0>gHFc}xUeA<+_SWpF zW!Ud~CLMa7Z^ht(lTBaQj>$YxdY<60RiWV!y757&LiOj*7$8HbonYLv;m$`o_qa$? zyDl-?Oz-Pf<)%PNyvXVZ5Wu^Dmkoo%hub63#Y}A z8qmXn4#=e~P{GTt?KHxrw$@o)yC%Z3F2jdO>g}WdbVO`Xe?qyRSZl;4^cfq%ojF_A zls5Z0`kTdE8YR%3twHx8t-XJ)j&Zq;zQlKQN~4XTqGyyiqFifV9%of(9FM%Bfd!IigeMOh<{t0wpzEyySzEnA!;95rvc~Ph$Act%pC5bo5A1owAJ0 zRN$}f>(QT_i$Br(Gs+xzhx1+q1Cj0t-i?J0BcvYKrrn<@556t`U8w-;;D5g~`h8); z`!czHA9#Pty!Kfh;O@NScXoPq*`3?)Y4IimjT85e&2ae|cjZ3RUzPxBJ5E zO0B3AHgcAkl-7n2!JH1=z0~-xHh8wx8U+;i`fx0vj91e_~?o zc@_jM#f1-4ybtVM3CR~xU7kAa31CXJ07}BdLmz5@W{<^U^K4f7dLusj@j`b#Oj{b` z+b6X9L+REJR}a-1ZV!EA{8B&izy<%!M-?Lo0gHsgZ+({4)|xKp=-?Wri{xWfV^=fh zMwAe<(@>?4988cIK%*8TE~dr)&TCBypby^}riRVRd&%kO$R9s?)L>>z@S3AGmFD4e z;kj`rqo7~_Y?6*XfA9zx1vCo+qcimp_ZR+r$2H^~5F}wDc&Zb$1dkG~8uwSI$QaUO z(OfO@&Dlg(UiRseHUd z88G=TBu#FZzqQy++-2wZPV(`+eD>^^0ZdkSQCWJ>%zOWpxC0QZeL-3IDGxH!m4THy z!+(bAr20-}<(Th6Y_ff9aHmZk%z(V~XC*+A5*r1;h1o$f#SD(~O#VG^6i zX1Qr5c7yR|hBpmIrSWr0*SA~p?%%P#^IA^o8Nb={rFo!1M~U3B+kN7J&2*dn``pPh zbJ$+n7se0Mj8953r9? z?ixSrG@i_I^N{elzzlbYY+reOMt5GznolhQxuURLtT;ufD}@+JZ;j(j3V5;gh1?h~ zwCr}9IF-sk98F$ni1-E$0ydaAbVtXw#$@TaA(;Bi0_IkB({lp@MXl*e@4?F}V2CD= zY2}D8(X&0R6I{`_rBW8#iN_kh<7k9KV>|jmp+U?peB{-S z59sH%8N}@NkCJf882Kt!%9*;h5E}>%#1V}GSyrs1SH-4-T$sWXjU@nVOy zW2wb^1&){RepTLk`-&cU;bDCB*|7=_;)JpFYFAdy3lH+o>e zW2skbVmF&3p*#kuU+SxWTU9>WW7NBaZCARUA` zo-u-ZNiR}Z_BGC?$ODItzJZf+rm%>^Y*RRx`$-<|*hl zuU)Kl_f~e664b}qscYp%wGOT*d)->c%ok5|GtF@Kz(C;n=1cjNoY$WG8vblp}8up=moAvB!c!939xGX{P$5XK}Q(HE*|S`QWXd z0~fA}ywo@3>!OhV!rQW9v4dBv4Cb`cO~qCV7vAXRMEb0tOB1`@Yjmjx;eIEtz7UC%%tGG&ViHy39Q^1IJIUi5l`Z?AMN!fHOknz$U?dp7Tk%ffiMUnxq!7BknqOZZI+ zCd{j`p&=m9(&IWN&VeIZS4Ltfb>YDSRu2#9s@h^1;b1I5)vtX#tWkX=*UIh7@TRUr z?|tLb%590)v>v0R{oW6oHO;Jb+9x)CL7AD)!5 z7|F%;IqycZ6S-$(jfH1ViI)o@`4o+W))DUS117p`_$1{j!D%_{D?%o%>*l zfpHp-YgIfclwje&>vwuAY)qY@HOpf=PDLltyRy0Unl!JGUi<-;oCErz!dJwcb-MdA zL>(|ot72o`l@z;vXtl@Q>DRJiA_kD{dq7^(e$6@3i!-}`KB*dS@p;mI<99Bf3 zIkMvszCsz-3$aR;2aMvxB~fic!E;MOs@%gl+Gx44Rq5+RoFg$?#50b>P|7?H;(UPO zdH_vI&)dUhE`dcia2s=5@_H~Se(F$Gxucxws(|_i$MzjnZsicnAPv(=!yp-((Gj{2Xlt=p z7xQ%871*l8PTg-bR&_ITYpS5KyX^MGOf#WXo7lhOTjWW5%1Gk_A;_UY1mpia=Jw!c z?CRvlz=1yet+{6X*?odh&sB#8yKRd+)+ftSIV^;dN!B>gQ_`gA;?gO+P3r*lu?THt z99hE}{fMW~`LeCfCTE7JRfk<&vK(BwczI3lX(B^6=TKM<`)QBMkjKg%OUiu&mM+mT z`CSH126q>k?|M%RvE6x-s20>5Z|gYPCL{gin~#-gVM>wa!2_1n7LjDj3gj+QdCpV9 zZ>r+o2nb9BCHi~Il%b7*+!qN`uf_&jB;&w$#=)R+dD+)=&8+IXxan>HPpy=-V$wT*O!l>2^8`pH8d@#~siw08E&ds;V7Gp0+O`*e=)!cOI@ zdR9A=jy>zF-!`RtW>}*z_#zyqNe5v@3GS2TwQaDgs+YdihQnD&9W!0|8NQSEt>5vz zWN{4O^yRUgl#;S|?;Nez-h@cnlD<**wC|=* zP^90K(=psQB;v~`Y3MpU5XwJ*xcT(Ah?T;o@dz;JX~aci0f&$zJ=V`o85nYKqm45-{ho@^Pa#ler=qoU+cY3 zZ^*{v8-V!Z literal 0 HcmV?d00001 diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml similarity index 99% rename from testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml rename to testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml index de615248..5962a03d 100644 --- a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownClass.receiver.yaml @@ -1,12 +1,12 @@ openapi: 3.0.0 info: - title: MWDI_2.0.1+simulator.unknownTargetObject.unknownClass.receiver + title: MWDI_2.0.1+simulator.unknownTargetObject.unknownClass.receiver.deprecated.deprecated version: 1.0.0 paths: ######################################################################################################################## # Service Layer - Individual Part -# MWDI_2.0.1+simulator.unknownTargetObject.unknownClass.receiver in static reference mode +# MWDI_2.0.1+simulator.unknownTargetObject.unknownClass.receiver.deprecated.deprecated in static reference mode ######################################################################################################################## /v1/regard-device-object-creation: diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml new file mode 100644 index 00000000..6758e21b --- /dev/null +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml @@ -0,0 +1,1865 @@ +openapi: 3.0.0 +info: + title: MWDI_2.0.1+simulator.unknownTargetObject.unknownMountName.receiver.deprecated + version: 1.0.0 + +paths: +######################################################################################################################## +# Service Layer - Individual Part +# MWDI_2.0.1+simulator.unknownTargetObject.unknownMountName.receiver.deprecated in static reference mode +######################################################################################################################## + + /v1/regard-device-alarm: + post: + operationId: regardDeviceAlarm + summary: 'Receives notifications about alarms at devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:alarm-event-notification + properties: + notification-proxy-1-0:alarm-event-notification: + type: object + required: + - alarm-event-sequence-number + - timestamp + - resource + - alarm-type-id + - alarm-type-qualifier + - problem-severity + properties: + alarm-event-sequence-number: + type: integer + timestamp: + type: string + resource: + type: string + alarm-type-id: + type: string + alarm-type-qualifier: + type: string + problem-severity: + type: string + example: + notification-proxy-1-0:alarm-event-notification: + alarm-event-sequence-number: 1 + timestamp: '2023-07-11T08:45:02+01:00' + resource: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=LTP-MWPS-TTP-RADIO-1A/layer-protocol=LP-MWPS-TTP-RADIO-1A/air-interface-2-0:air-interface-pac' + alarm-type-id: 'siae-alarms-1-0:radioEquipLinkTelemetryFailAlarm' + alarm-type-qualifier: '' + problem-severity: 'major' + responses: + '500': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + + /v1/regard-device-attribute-value-change: + post: + operationId: regardDeviceAttributeValueChange + summary: 'Receives notifications about changes of values of attributes inside the devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:attribute-value-changed-notification + properties: + notification-proxy-1-0:attribute-value-changed-notification: + type: object + required: + - counter + - timestamp + - object-path + - attribute-name + - new-value + properties: + counter: + type: integer + timestamp: + type: string + object-path: + type: string + attribute-name: + type: string + new-value: + type: string + example: + notification-proxy-1-0:attribute-value-changed-notification: + counter: 32 + timestamp: '2010-11-20T14:00:00+01:00' + object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=RF-2146697857/layer-protocol=2146697857/air-interface-2-0:air-interface-pac/air-interface-configuration' + attribute-name: 'performance-monitoring-is-on' + new-value: 'true' + responses: + '500': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + + /v1/regard-device-object-creation: + post: + operationId: regardDeviceObjectCreation + summary: 'Receives notifications about objects that have been created inside the devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:object-creation-notification + properties: + notification-proxy-1-0:object-creation-notification: + type: object + required: + - counter + - timestamp + - object-path + properties: + counter: + type: integer + timestamp: + type: string + object-path: + type: string + example: + notification-proxy-1-0:object-creation-notification: + counter: 2 + timestamp: '2023-07-10T12:27:03+01:00' + object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/profile-collection/profile=co-channel-17' + responses: + '404': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + + /v1/regard-device-object-deletion: + post: + operationId: regardDeviceObjectDeletion + summary: 'Receives notifications about objects that have been deleted inside the devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:object-deletion-notification + properties: + notification-proxy-1-0:object-deletion-notification: + type: object + required: + - counter + - timestamp + - object-path + properties: + counter: + type: integer + timestamp: + type: string + object-path: + type: string + example: + notification-proxy-1-0:object-deletion-notification: + counter: 14 + timestamp: '2023-07-13T09:31:48+01:00' + object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=RF-2146697857' + responses: + '500': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + +######################################################################################################################## +# Common Components +######################################################################################################################## +components: + parameters: + user: + name: user + in: header + required: true + schema: + type: string + example: 'User Name' + description: 'User identifier from the system starting the service call' + originator: + name: originator + in: header + required: true + schema: + type: string + minLength: 3 + example: 'Resolver' + description: > + 'Identification for the system consuming the API, as defined in + [/core-model-1-4:control-construct/logical-termination-point={uuid}/layer-protocol=0/http-client-interface-1-0:http-client-interface-pac/http-client-interface-configuration/application-name]' + x-correlator: + name: x-correlator + in: header + required: true + schema: + type: string + pattern: '^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' + description: 'Empty string accepted from external applications.' + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses' + trace-indicator: + name: trace-indicator + in: header + required: true + schema: + type: string + pattern: '^([0-9]+)(\.([0-9]+))*$' + description: 'Empty string accepted from external applications.' + example: '1.3.1' + description: 'Sequence of request numbers along the flow' + customer-journey: + name: customer-journey + in: header + required: true + schema: + type: string + example: 'Unknown value' + description: 'Holds information supporting customer’s journey to which the execution applies' + mountName: + name: mountName + in: path + required: true + schema: + type: string + example: '222250001' + description: 'The mountName of the device that is addressed by the request' + uuid: + name: uuid + in: path + required: true + schema: + type: string + example: 'LTP-MWPS-TTP-1-1' + description: 'Instance identifier that is unique within the device' + uuid1: + name: uuid1 + in: path + required: true + schema: + type: string + example: 'LTP-MWPS-TTP-1-1' + description: 'Another instance identifier that is unique within the device' + localId: + name: localId + in: path + required: true + schema: + type: string + example: 'LP-MWPS-TTP-1-1' + description: 'Instance identifier that is unique within its list' + fields: + name: fields + in: query + required: false + schema: + type: string + example: 'node(node-id;netconf-node-topology:connection-status)' + description: 'Query parameter to filter ressources according to RFC8040 fields filter spec' + responses: + responseForErroredServiceRequests: + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + headers: + x-correlator: + schema: + type: string + pattern: '^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses. Its value must be identical at the response compared with its corresponding request' + exec-time: + schema: + type: integer + example: 1100 + description: 'Value written by the service provider, reporting the total elapsed time for the execution, including all the additional processing needed to retrieve the data from the backend service. Expressed in milliseconds' + backend-time: + schema: + type: integer + example: 850 + description: 'Value written by the service provider, reporting the elapsed time for data retrieval from the backend (service invocation, database access…). Expressed in milliseconds' + responseForErroredOamRequests: + description: 'Response in case of errored OaM requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + '429': + description: 'Response in case too many requests need to be executed in parallel or too many requests have been received within a time period. The maximum number of parallel requests is defined in an IntegerProfile with the service name as a prefix and MaxNumberOfParallelRequests as a suffix. Some time period to elapse for throttling incomming requests is defined in an IntegerProfile with the service name as a prefix and ThrottlingPeriod as a suffix' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 429 + maximum: 429 + format: int32 + message: + type: string + enum: + - 'Too many requests' + '460': + description: 'Response in case the mountName provided in the request is not found in the list of connected devices' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 460 + maximum: 460 + format: int32 + message: + type: string + enum: + - 'Not connected. Requested device is currently not in connected state at the controller' + '461': + description: 'Response in case the (parent) topology object provided in the request (body or path) is not found in the cache.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 461 + maximum: 461 + format: int32 + message: + type: string + enum: + - 'Not available. The topology (parent) object is currently not found in the cache.' + '470': + description: 'Response in case the resource specified in the request does not exist within the connected device' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 470 + maximum: 470 + format: int32 + message: + type: string + enum: + - 'Resource not existing. Device informs about addressed resource unknown' + '471': + description: 'Response in case the (child) topology object specified in the request (body or path) does not exist within the cache.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 471 + maximum: 471 + format: int32 + message: + type: string + enum: + - '(Child) topology object not existing. Cache informs about addressed resource unknown.' + '502': + description: 'Response in case the server is acting as a gateway or proxy and received an invalid response from the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 502 + maximum: 502 + format: int32 + message: + type: string + enum: + - 'Bad Gateway' + '530': + description: 'Response in case the referenced resource exists (e.g. device connected and resource exists in internal datatree), but response data is either not available, lost during transmission, incomplete or corrupted' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 530 + maximum: 530 + format: int32 + message: + type: string + enum: + - 'Data invalid. Response data not available, incomplete or corrupted' + '531': + description: 'Response in case the server is acting as a gateway or proxy and was unable to authenticate at the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 531 + maximum: 531 + format: int32 + message: + type: string + enum: + - 'Bad Gateway. Authentication at upstream server failed.' + '532': + description: 'Response in case the server is acting as a gateway or proxy and was unable to connect to the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 532 + maximum: 532 + format: int32 + message: + type: string + enum: + - 'Bad Gateway. Upstream server not responding.' + '533': + description: 'Response in case the referenced resource for an connected device does not exist at the controller.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 533 + maximum: 533 + format: int32 + message: + type: string + enum: + - 'Resource unknown. The resource for the connected device does not exist at the Controller.' + headers: + x-correlator: + schema: + type: string + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses. Its value must be identical at the response compared with its corresponding request' + exec-time: + schema: + type: integer + example: 1100 + description: 'Value written by the service provider, reporting the total elapsed time for the execution, including all the additional processing needed to retrieve the data from the backend service. Expressed in milliseconds' + backend-time: + schema: + type: integer + example: 850 + description: 'Value written by the service provider, reporting the elapsed time for data retrieval from the backend (service invocation, database access…). Expressed in milliseconds' + life-cycle-state: + schema: + type: string + enum: + - 'EXPERIMENTAL' + - 'OPERATIONAL' + - 'DEPRECATED' + - 'OBSOLETE' + - 'UNKNOWN' + - 'NOT_YET_DEFINED' + example: 'EXPERIMENTAL' + schemas: + errorDescription: + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string + genericRepresentation: + type: object + required: + - response-value-list + - consequent-action-list + properties: + response-value-list: + type: array + items: + type: object + required: + - field-name + - value + - datatype + properties: + field-name: + type: string + description: > + 'Field name + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-capability/field-name]' + value: + type: string + description: > + 'Field value + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-configuration/value]' + datatype: + type: string + description: > + 'Field datatype + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-capability/datatype]' + consequent-action-list: + type: array + items: + type: object + required: + - label + - request + - display-in-new-browser-window + properties: + label: + type: string + description: > + 'Label that shall be presented on the button + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/label]' + request: + type: string + description: > + 'Request that shall be called, when button gets pressed + from + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-protocol}] + :// + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-address/ipv-4-address} + or + {/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-address/domain-name}] + : + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-port}] + [{/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-configuration/consequent-operation-reference}]' + input-value-list: + type: array + items: + type: object + required: + - field-name + properties: + field-name: + type: string + description: > + 'Name of an input value required for executing the Request + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/input-value-list=*/name]' + unit: + type: string + description: > + 'Unit of an input value required for executing the Request + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/input-value-list=*/unit]' + display-in-new-browser-window: + type: boolean + description: > + 'True in case Request shall be represented in a new browser window + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/display-in-new-browser-window]' + logicalTerminationPoint: + type: object + required: + - uuid + - ltp-direction + - client-ltp + - server-ltp + - layer-protocol + properties: + uuid: + type: string + ltp-direction: + type: string + client-ltp: + type: array + uniqueItems: true + items: + type: string + server-ltp: + type: array + uniqueItems: true + items: + type: string + layer-protocol: + type: array + minItems: 1 + maxItems: 1 + items: + oneOf: + - description: 'operation server' + type: object + required: + - local-id + - layer-protocol-name + - operation-server-interface-1-0:operation-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + operation-server-interface-1-0:operation-server-interface-pac: + type: object + required: + - operation-server-interface-capability + - operation-server-interface-configuration + properties: + operation-server-interface-capability: + type: object + required: + - operation-name + properties: + operation-name: + type: string + operation-server-interface-configuration: + type: object + required: + - life-cycle-state + properties: + life-cycle-state: + type: string + - description: 'http server' + type: object + required: + - local-id + - layer-protocol-name + - http-server-interface-1-0:http-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + http-server-interface-1-0:http-server-interface-pac: + type: object + required: + - http-server-interface-capability + properties: + http-server-interface-capability: + type: object + required: + - application-name + - release-number + - data-update-period + properties: + application-name: + type: string + release-number: + type: string + data-update-period: + type: string + - description: 'tcp server' + type: object + required: + - local-id + - layer-protocol-name + - tcp-server-interface-1-0:tcp-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + tcp-server-interface-1-0:tcp-server-interface-pac: + type: object + required: + - tcp-server-interface-configuration + properties: + tcp-server-interface-configuration: + type: object + required: + - description + - local-protocol + - local-address + - local-port + properties: + description: + type: string + local-protocol: + type: string + local-address: + type: object + properties: + ipv-4-address: + type: string + domain-name: + type: string + local-port: + type: integer + - description: 'operation client' + type: object + required: + - local-id + - layer-protocol-name + - operation-client-interface-1-0:operation-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + operation-client-interface-1-0:operation-client-interface-pac: + type: object + required: + - operation-client-interface-configuration + - operation-client-interface-status + properties: + operation-client-interface-configuration: + type: object + required: + - operation-name + properties: + operation-name: + type: string + operation-client-interface-status: + type: object + required: + - operational-state + - life-cycle-state + properties: + operational-state: + type: string + life-cycle-state: + type: string + - description: 'elasticsearch client' + type: object + required: + - local-id + - layer-protocol-name + - elasticsearch-client-interface-1-0:elasticsearch-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + elasticsearch-client-interface-1-0:elasticsearch-client-interface-pac: + type: object + required: + - elasticsearch-client-interface-configuration + - elasticsearch-client-interface-status + properties: + elasticsearch-client-interface-configuration: + type: object + required: + - index-alias + properties: + index-alias: + type: string + elasticsearch-client-interface-status: + type: object + required: + - operational-state + - life-cycle-state + properties: + operational-state: + type: string + life-cycle-state: + type: string + - description: 'http client' + type: object + required: + - local-id + - layer-protocol-name + - http-client-interface-1-0:http-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + http-client-interface-1-0:http-client-interface-pac: + type: object + required: + - http-client-interface-configuration + properties: + http-client-interface-configuration: + type: object + required: + - application-name + - release-number + properties: + application-name: + type: string + release-number: + type: string + - description: 'tcp client' + type: object + required: + - local-id + - layer-protocol-name + - tcp-client-interface-1-0:tcp-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + tcp-client-interface-1-0:tcp-client-interface-pac: + type: object + required: + - tcp-client-interface-configuration + properties: + tcp-client-interface-configuration: + type: object + required: + - remote-protocol + - remote-address + - remote-port + properties: + remote-protocol: + type: string + remote-address: + type: object + properties: + ip-address: + type: object + properties: + ipv-4-address: + type: string + domain-name: + type: string + remote-port: + type: integer + forwardingDomain: + type: object + required: + - uuid + - forwarding-construct + properties: + uuid: + type: string + forwarding-construct: + type: array + items: + type: object + required: + - uuid + - name + - fc-port + properties: + uuid: + type: string + name: + type: array + items: + type: object + required: + - value-name + - value + properties: + value-name: + type: string + value: + type: string + fc-port: + type: array + items: + type: object + required: + - local-id + - port-direction + - logical-termination-point + properties: + local-id: + type: string + port-direction: + type: string + logical-termination-point: + type: string + + CONTROL_CONSTRUCT: + type: object + required: + - uuid + - alarms-1-0:alarm-pac + - equipment + - firmware-1-0:firmware-collection + - profile-collection + - logical-termination-point + properties: + uuid: + type: string + alarms-1-0:alarm-pac: + $ref: '#/components/schemas/ALARM_PAC' + equipment: + type: array + items: + $ref: '#/components/schemas/EQUIPMENT' + firmware-1-0:firmware-collection: + $ref: '#/components/schemas/FIRMWARE_COLLECTION' + profile-collection: + $ref: '#/components/schemas/PROFILE_COLLECTION' + forwarding-domain: + type: array + items: + $ref: '#/components/schemas/FORWARDING_DOMAIN' + logical-termination-point: + type: array + items: + $ref: '#/components/schemas/LOGICAL_TERMINATION_POINT' + + ALARM_PAC: + type: object + required: + - alarm-capability + - alarm-configuration + - current-alarms + - alarm-event-records + properties: + alarm-capability: + $ref: '#/components/schemas/ALARM_CAPABILITY' + alarm-configuration: + $ref: '#/components/schemas/ALARM_CONFIGURATION' + current-alarms: + $ref: '#/components/schemas/CURRENT_ALARMS' + alarm-event-records: + $ref: '#/components/schemas/ALARM_EVENT_RECORDS' + ALARM_CAPABILITY: + type: object + ALARM_CONFIGURATION: + type: object + CURRENT_ALARMS: + type: object + ALARM_EVENT_RECORDS: + type: object + + EQUIPMENT: + type: object + required: + - uuid + properties: + uuid: + type: string + connector: + type: array + items: + $ref: '#/components/schemas/CONNECTOR' + contained-holder: + type: array + items: + $ref: '#/components/schemas/CONTAINED_HOLDER' + expected-equipment: + type: array + items: + $ref: '#/components/schemas/EXPECTED_EQUIPMENT' + actual-equipment: + type: object + CONNECTOR: + type: object + required: + - local-id + properties: + local-id: + type: string + CONTAINED_HOLDER: + type: object + required: + - local-id + properties: + local-id: + type: string + EXPECTED_EQUIPMENT: + type: object + required: + - local-id + properties: + local-id: + type: string + ACTUAL_EQUIPMENT: + type: object + + FIRMWARE_COLLECTION: + type: object + required: + - firmware-component-list + properties: + firmware-component-list: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_LIST' + FIRMWARE_COMPONENT_LIST: + type: array + items: + type: object + required: + - local-id + - firmware-component-pac + properties: + local-id: + type: string + firmware-component-pac: + type: object + required: + - firmware-component-capability + - firmware-component-status + properties: + firmware-component-capability: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_CAPABILITY' + firmware-component-status: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_STATUS' + FIRMWARE_COMPONENT_CAPABILITY: + type: object + FIRMWARE_COMPONENT_STATUS: + type: object + + PROFILE_COLLECTION: + type: object + required: + - profile + properties: + profile: + type: array + items: + $ref: '#/components/schemas/PROFILE' + PROFILE: + oneOf: + - description: 'co-channel-profile' + type: object + required: + - uuid + - profile-name + - co-channel-profile-1-0:co-channel-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'co-channel-profile-1-0:PROFILE_NAME_TYPE_CO_CHANNEL_PROFILE' + co-channel-profile-1-0:co-channel-profile-pac: + type: object + required: + - co-channel-profile-capability + - co-channel-profile-configuration + properties: + co-channel-profile-capability: + $ref: '#/components/schemas/CO_CHANNEL_PROFILE_CAPABILITY' + co-channel-profile-configuration: + $ref: '#/components/schemas/CO_CHANNEL_PROFILE_CONFIGURATION' + - description: 'policing-profile' + type: object + required: + - uuid + - profile-name + - policing-profile-1-0:policing-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'policing-profile-1-0:PROFILE_NAME_TYPE_POLICING_PROFILE' + policing-profile-1-0:policing-profile-pac: + type: object + required: + - policing-profile-capability + - policing-profile-configuration + properties: + policing-profile-capability: + $ref: '#/components/schemas/POLICING_PROFILE_CAPABILITY' + policing-profile-configuration: + $ref: '#/components/schemas/POLICING_PROFILE_CONFIGURATION' + - description: 'qos-profile' + type: object + required: + - uuid + - profile-name + - qos-profile-1-0:qos-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'qos-profile-1-0:PROFILE_NAME_TYPE_QOS_PROFILE' + qos-profile-1-0:qos-profile-pac: + type: object + required: + - qos-profile-capability + - qos-profile-configuration + properties: + qos-profile-capability: + $ref: '#/components/schemas/QOS_PROFILE_CAPABILITY' + qos-profile-configuration: + $ref: '#/components/schemas/QOS_PROFILE_CONFIGURATION' + - description: 'scheduler-profile' + type: object + required: + - uuid + - profile-name + - scheduler-profile-1-0:scheduler-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'scheduler-profile-1-0:PROFILE_NAME_TYPE_SCHEDULER_PROFILE' + scheduler-profile-1-0:scheduler-profile-pac: + type: object + required: + - scheduler-profile-capability + - scheduler-profile-configuration + properties: + scheduler-profile-capability: + $ref: '#/components/schemas/SCHEDULER_PROFILE_CAPABILITY' + scheduler-profile-configuration: + $ref: '#/components/schemas/SCHEDULER_PROFILE_CONFIGURATION' + - description: 'wred-profile' + type: object + required: + - uuid + - profile-name + - wred-profile-1-0:wred-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'wred-profile-1-0:PROFILE_NAME_TYPE_WRED_PROFILE' + wred-profile-1-0:wred-profile-pac: + type: object + required: + - wred-profile-capability + - wred-profile-configuration + properties: + wred-profile-capability: + $ref: '#/components/schemas/WRED_PROFILE_CAPABILITY' + wred-profile-configuration: + $ref: '#/components/schemas/WRED_PROFILE_CONFIGURATION' + - description: 'wred-template-profile' + type: object + required: + - uuid + - profile-name + - wred-template-profile-1-0:wred-template-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'wred-template-profile-1-0:PROFILE_NAME_TYPE_WRED_TEMPLATE_PROFILE' + wred-template-profile-1-0:wred-template-profile-pac: + type: object + required: + - wred-template-profile-capability + - wred-template-profile-configuration + properties: + wred-profile-capability: + $ref: '#/components/schemas/WRED_TEMPLATE_PROFILE_CAPABILITY' + wred-profile-configuration: + $ref: '#/components/schemas/WRED_TEMPLATE_PROFILE_CONFIGURATION' + CO_CHANNEL_PROFILE_CAPABILITY: + type: object + CO_CHANNEL_PROFILE_CONFIGURATION: + type: object + POLICING_PROFILE_CAPABILITY: + type: object + POLICING_PROFILE_CONFIGURATION: + type: object + QOS_PROFILE_CAPABILITY: + type: object + QOS_PROFILE_CONFIGURATION: + type: object + SCHEDULER_PROFILE_CAPABILITY: + type: object + SCHEDULER_PROFILE_CONFIGURATION: + type: object + WRED_PROFILE_CAPABILITY: + type: object + WRED_PROFILE_CONFIGURATION: + type: object + WRED_TEMPLATE_PROFILE_CAPABILITY: + type: object + WRED_TEMPLATE_PROFILE_CONFIGURATION: + type: object + + LOGICAL_TERMINATION_POINT: + type: object + required: + - uuid + - layer-protocol + properties: + uuid: + type: string + ltp-augment-1-0:ltp-augment-pac: + $ref: '#/components/schemas/LTP_AUGMENT_PAC' + embedded-clock: + type: array + items: + $ref: '#/components/schemas/EMBEDDED_CLOCK' + layer-protocol: + type: array + items: + $ref: '#/components/schemas/LAYER_PROTOCOL' + LTP_AUGMENT_PAC: + type: object + EMBEDDED_CLOCK: + type: object + LAYER_PROTOCOL: + oneOf: + - description: 'air-interface' + type: object + required: + - local-id + - layer-protocol-name + - air-interface-2-0:air-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'air-interface-2-0:LAYER_PROTOCOL_NAME_TYPE_AIR_LAYER' + air-interface-2-0:air-interface-pac: + $ref: '#/components/schemas/AIR_INTERFACE_PAC' + - description: 'ethernet-container' + type: object + required: + - local-id + - layer-protocol-name + - ethernet-container-2-0:ethernet-container-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'ethernet-container-2-0:LAYER_PROTOCOL_NAME_TYPE_ETHERNET_CONTAINER_LAYER' + ethernet-container-2-0:ethernet-container-pac: + $ref: '#/components/schemas/ETHERNET_CONTAINER_PAC' + - description: 'hybrid-mw-structure' + type: object + required: + - local-id + - layer-protocol-name + - hybrid-mw-structure-2-0:hybrid-mw-structure-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'hybrid-mw-structure-2-0:LAYER_PROTOCOL_NAME_TYPE_HYBRID_MW_STRUCTURE_LAYER' + hybrid-mw-structure-2-0:hybrid-mw-structure-pac: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_PAC' + - description: 'mac-interface' + type: object + required: + - local-id + - layer-protocol-name + - mac-interface-1-0:mac-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'mac-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_MAC_LAYER' + mac-interface-1-0:mac-interface-pac: + $ref: '#/components/schemas/MAC_INTERFACE_PAC' + - description: 'pure-ethernet-structure' + type: object + required: + - local-id + - layer-protocol-name + - pure-ethernet-structure-2-0:pure-ethernet-structure-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'pure-ethernet-structure-2-0:LAYER_PROTOCOL_NAME_TYPE_PURE_ETHERNET_STRUCTURE_LAYER' + pure-ethernet-structure-2-0:pure-ethernet-structure-pac: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_PAC' + - description: 'vlan-interface' + type: object + required: + - local-id + - layer-protocol-name + - vlan-interface-1-0:vlan-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'vlan-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_VLAN_LAYER' + vlan-interface-1-0:vlan-interface-pac: + $ref: '#/components/schemas/VLAN_INTERFACE_PAC' + - description: 'wire-interface' + type: object + required: + - local-id + - layer-protocol-name + - wire-interface-2-0:wire-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'wire-interface-2-0:LAYER_PROTOCOL_NAME_TYPE_WIRE_LAYER' + wire-interface-2-0:wire-interface-pac: + $ref: '#/components/schemas/WIRE_INTERFACE_PAC' + - description: 'ip-interface' + type: object + required: + - local-id + - layer-protocol-name + - ip-interface-1-0:ip-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'ip-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_IP_LAYER' + ip-interface-1-0:ip-interface-pac: + $ref: '#/components/schemas/IP_INTERFACE_PAC' + - description: 'tdm-container' + type: object + required: + - local-id + - layer-protocol-name + - tdm-container-2-0:tdm-container-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'tdm-container-2-0:LAYER_PROTOCOL_NAME_TYPE_TDM_CONTAINER_LAYER' + tdm-container-2-0:tdm-container-pac: + $ref: '#/components/schemas/TDM_CONTAINER_PAC' + FORWARDING_DOMAIN: + type: object + required: + - uuid + properties: + uuid: + type: string + fc: + type: array + items: + $ref: '#/components/schemas/FORWARDING_CONSTRUCT' + FORWARDING_CONSTRUCT: + type: object + required: + - uuid + properties: + uuid: + type: string + fc-port: + type: array + items: + $ref: '#/components/schemas/FORWARDING_CONSTRUCT_PORT' + FORWARDING_CONSTRUCT_PORT: + type: object + required: + - local-id + properties: + local-id: + type: string + LINK: + oneOf: + - description: 'generic' + type: object + required: + - uuid + - layer-protocol-name + - link-direction + - forwarding-domain + - link-port + properties: + uuid: + type: string + layer-protocol-name: + type: string + link-direction: + type: string + enum: + - 'core-model-1-4:FORWARDING_DIRECTION_BIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_UNIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_OMNIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_UNDEFINED_OR_UNKNOWN' + forwarding-domain: + type: array + items: + type: string + link-port: + type: array + items: + $ref: '#/components/schemas/LINK_PORT' + - description: 'minimum for rest' + type: object + required: + - uuid + - layer-protocol-name + - end-point-list + properties: + uuid: + type: string + layer-protocol-name: + type: string + end-point-list: + type: array + items: + type: object + required: + - control-construct + - logical-termination-point + - layer-protocol + properties: + control-construct: + type: string + logical-termination-point: + type: string + layer-protocol: + type: string + LINK_PORT: + oneOf: + - description: 'generic' + type: object + required: + - local-id + - link-port-direction + - logical-termination-point + properties: + local-id: + type: string + link-port-direction: + type: string + enum: + - 'core-model-1-4:PORT_DIRECTION_INPUT' + - 'core-model-1-4:PORT_DIRECTION_OUTPUT' + - 'core-model-1-4:PORT_DIRECTION_BIDIRECTIONAL' + - 'core-model-1-4:PORT_DIRECTION_OMNIDIRECTIONAL' + - 'core-model-1-4:PORT_DIRECTION_UNIDENTIFIED_OR_UNKNOWN' + logical-termination-point: + type: string + + AIR_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - air-interface-capability + - air-interface-configuration + - air-interface-status + - air-interface-historical-performances + additionalProperties: false + properties: + air-interface-capability: + $ref: '#/components/schemas/AIR_INTERFACE_CAPABILITY' + air-interface-configuration: + $ref: '#/components/schemas/AIR_INTERFACE_CONFIGURATION' + air-interface-status: + $ref: '#/components/schemas/AIR_INTERFACE_STATUS' + air-interface-historical-performances: + $ref: '#/components/schemas/AIR_INTERFACE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - air-interface-capability + - air-interface-configuration + - air-interface-status + - air-interface-current-performance + - air-interface-historical-performances + properties: + air-interface-capability: + $ref: '#/components/schemas/AIR_INTERFACE_CAPABILITY' + air-interface-configuration: + $ref: '#/components/schemas/AIR_INTERFACE_CONFIGURATION' + air-interface-status: + $ref: '#/components/schemas/AIR_INTERFACE_STATUS' + air-interface-current-performance: + $ref: '#/components/schemas/AIR_INTERFACE_CURRENT_PERFORMANCE' + air-interface-historical-performances: + $ref: '#/components/schemas/AIR_INTERFACE_HISTORICAL_PERFORMANCES' + AIR_INTERFACE_CAPABILITY: + type: object + AIR_INTERFACE_CONFIGURATION: + type: object + AIR_INTERFACE_STATUS: + type: object + AIR_INTERFACE_CURRENT_PERFORMANCE: + type: object + AIR_INTERFACE_HISTORICAL_PERFORMANCES: + type: object + + ETHERNET_CONTAINER_PAC: + oneOf: + - description: 'cache' + type: object + required: + - ethernet-container-capability + - ethernet-container-configuration + - ethernet-container-status + - ethernet-container-historical-performances + additionalProperties: false + properties: + ethernet-container-capability: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CAPABILITY' + ethernet-container-configuration: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CONFIGURATION' + ethernet-container-status: + $ref: '#/components/schemas/ETHERNET_CONTAINER_STATUS' + ethernet-container-historical-performances: + $ref: '#/components/schemas/ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - ethernet-container-capability + - ethernet-container-configuration + - ethernet-container-status + - ethernet-container-current-performance + - ethernet-container-historical-performances + properties: + ethernet-container-capability: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CAPABILITY' + ethernet-container-configuration: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CONFIGURATION' + ethernet-container-status: + $ref: '#/components/schemas/ETHERNET_CONTAINER_STATUS' + ethernet-container-current-performance: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CURRENT_PERFORMANCE' + ethernet-container-historical-performances: + $ref: '#/components/schemas/ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES' + ETHERNET_CONTAINER_CAPABILITY: + type: object + ETHERNET_CONTAINER_CONFIGURATION: + type: object + ETHERNET_CONTAINER_STATUS: + type: object + ETHERNET_CONTAINER_CURRENT_PERFORMANCE: + type: object + ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES: + type: object + + HYBRID_MW_STRUCTURE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - hybrid-mw-structure-capability + - hybrid-mw-structure-configuration + - hybrid-mw-structure-status + - hybrid-mw-structure-historical-performances + additionalProperties: false + properties: + hybrid-mw-structure-capability: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CAPABILITY' + hybrid-mw-structure-configuration: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CONFIGURATION' + hybrid-mw-structure-status: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_STATUS' + hybrid-mw-structure-historical-performances: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - hybrid-mw-structure-capability + - hybrid-mw-structure-configuration + - hybrid-mw-structure-status + - hybrid-mw-structure-current-performance + - hybrid-mw-structure-historical-performances + properties: + hybrid-mw-structure-capability: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CAPABILITY' + hybrid-mw-structure-configuration: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CONFIGURATION' + hybrid-mw-structure-status: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_STATUS' + hybrid-mw-structure-current-performance: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CURRENT_PERFORMANCE' + hybrid-mw-structure-historical-performances: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES' + HYBRID_MW_STRUCTURE_CAPABILITY: + type: object + HYBRID_MW_STRUCTURE_CONFIGURATION: + type: object + HYBRID_MW_STRUCTURE_STATUS: + type: object + HYBRID_MW_STRUCTURE_CURRENT_PERFORMANCE: + type: object + HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES: + type: object + + MAC_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - mac-interface-capability + - mac-interface-configuration + - mac-interface-status + properties: + mac-interface-capability: + $ref: '#/components/schemas/MAC_INTERFACE_CAPABILITY' + mac-interface-configuration: + $ref: '#/components/schemas/MAC_INTERFACE_CONFIGURATION' + mac-interface-status: + $ref: '#/components/schemas/MAC_INTERFACE_STATUS' + - description: 'live' + type: object + required: + - mac-interface-capability + - mac-interface-configuration + - mac-interface-status + properties: + mac-interface-capability: + $ref: '#/components/schemas/MAC_INTERFACE_CAPABILITY' + mac-interface-configuration: + $ref: '#/components/schemas/MAC_INTERFACE_CONFIGURATION' + mac-interface-status: + $ref: '#/components/schemas/MAC_INTERFACE_STATUS' + MAC_INTERFACE_CAPABILITY: + type: object + MAC_INTERFACE_CONFIGURATION: + type: object + MAC_INTERFACE_STATUS: + type: object + + PURE_ETHERNET_STRUCTURE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - pure-ethernet-structure-capability + - pure-ethernet-structure-configuration + - pure-ethernet-structure-status + - pure-ethernet-structure-historical-performances + additionalProperties: false + properties: + pure-ethernet-structure-capability: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CAPABILITY' + pure-ethernet-structure-configuration: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CONFIGURATION' + pure-ethernet-structure-status: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_STATUS' + pure-ethernet-structure-historical-performances: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - pure-ethernet-structure-capability + - pure-ethernet-structure-configuration + - pure-ethernet-structure-status + - pure-ethernet-structure-current-performance + - pure-ethernet-structure-historical-performances + properties: + pure-ethernet-structure-capability: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CAPABILITY' + pure-ethernet-structure-configuration: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CONFIGURATION' + pure-ethernet-structure-status: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_STATUS' + pure-ethernet-structure-current-performance: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CURRENT_PERFORMANCE' + pure-ethernet-structure-historical-performances: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES' + PURE_ETHERNET_STRUCTURE_CAPABILITY: + type: object + PURE_ETHERNET_STRUCTURE_CONFIGURATION: + type: object + PURE_ETHERNET_STRUCTURE_STATUS: + type: object + PURE_ETHERNET_STRUCTURE_CURRENT_PERFORMANCE: + type: object + PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES: + type: object + + VLAN_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - vlan-interface-capability + - vlan-interface-configuration + additionalProperties: false + properties: + vlan-interface-capability: + $ref: '#/components/schemas/VLAN_INTERFACE_CAPABILITY' + vlan-interface-configuration: + $ref: '#/components/schemas/VLAN_INTERFACE_CONFIGURATION' + - description: 'live' + type: object + required: + - vlan-interface-capability + - vlan-interface-configuration + properties: + vlan-interface-capability: + $ref: '#/components/schemas/VLAN_INTERFACE_CAPABILITY' + vlan-interface-configuration: + $ref: '#/components/schemas/VLAN_INTERFACE_CONFIGURATION' + VLAN_INTERFACE_CAPABILITY: + type: object + VLAN_INTERFACE_CONFIGURATION: + type: object + + WIRE_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - wire-interface-capability + - wire-interface-configuration + - wire-interface-status + - wire-interface-historical-performances + additionalProperties: false + properties: + wire-interface-capability: + $ref: '#/components/schemas/WIRE_INTERFACE_CAPABILITY' + wire-interface-configuration: + $ref: '#/components/schemas/WIRE_INTERFACE_CONFIGURATION' + wire-interface-status: + $ref: '#/components/schemas/WIRE_INTERFACE_STATUS' + wire-interface-historical-performances: + $ref: '#/components/schemas/WIRE_INTERFACE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - wire-interface-capability + - wire-interface-configuration + - wire-interface-status + - wire-interface-current-performance + - wire-interface-historical-performances + properties: + wire-interface-capability: + $ref: '#/components/schemas/WIRE_INTERFACE_CAPABILITY' + wire-interface-configuration: + $ref: '#/components/schemas/WIRE_INTERFACE_CONFIGURATION' + wire-interface-status: + $ref: '#/components/schemas/WIRE_INTERFACE_STATUS' + wire-interface-current-performance: + $ref: '#/components/schemas/WIRE_INTERFACE_CURRENT_PERFORMANCE' + wire-interface-historical-performances: + $ref: '#/components/schemas/WIRE_INTERFACE_HISTORICAL_PERFORMANCES' + WIRE_INTERFACE_CAPABILITY: + type: object + WIRE_INTERFACE_CONFIGURATION: + type: object + WIRE_INTERFACE_STATUS: + type: object + WIRE_INTERFACE_CURRENT_PERFORMANCE: + type: object + WIRE_INTERFACE_HISTORICAL_PERFORMANCES: + type: object + IP_INTERFACE_PAC: + type: object + required: + - ip-interface-capability + - ip-interface-configuration + - ip-interface-status + properties: + ip-interface-capability: + $ref: '#/components/schemas/IP_INTERFACE_CAPABILITY' + ip-interface-configuration: + $ref: '#/components/schemas/IP_INTERFACE_CONFIGURATION' + ip-interface-status: + $ref: '#/components/schemas/IP_INTERFACE_STATUS' + IP_INTERFACE_CAPABILITY: + type: object + IP_INTERFACE_CONFIGURATION: + type: object + IP_INTERFACE_STATUS: + type: object + + TDM_CONTAINER_PAC: + type: object + required: + - tdm-container-capability + - tdm-container-configuration + - tdm-container-status + properties: + tdm-container-capability: + $ref: '#/components/schemas/TDM_CONTAINER_CAPABILITY' + tdm-container-configuration: + $ref: '#/components/schemas/TDM_CONTAINER_CONFIGURATION' + tdm-container-status: + $ref: '#/components/schemas/TDM_CONTAINER_STATUS' + TDM_CONTAINER_CAPABILITY: + type: object + TDM_CONTAINER_CONFIGURATION: + type: object + TDM_CONTAINER_STATUS: + type: object + + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: operation-key + basicAuth: + type: http + scheme: basic diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+diagram.unknownTargetObject.receiver.plantuml b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+diagram.unknownTargetObject.receiver.plantuml index 8147cc89..9eb7922c 100644 --- a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+diagram.unknownTargetObject.receiver.plantuml +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+diagram.unknownTargetObject.receiver.plantuml @@ -10,10 +10,6 @@ participant "Data" as Data participant "Collection" as Collection participant "/v1/regard-controller-attribute-value-change" as RCAVC -participant "/v1/regard-device-alarm" as RDA -participant "/v1/regard-device-attribute-value-change" as RDAVC -participant "/v1/regard-device-object-deletion" as RDOD -participant "/v1/regard-device-object-creation" as RDOC group Preparation Data --\\o Postman : {servers, collection-input-list} @@ -30,60 +26,6 @@ group /v1/regard-controller-attribute-value-change end note end -group /v1/regard-device-alarm - Collection --\\o Postman : {servers, collection-input-list} - Postman -> RDA : {requestBody with unknown mountName in resource} - Postman <-- RDA : 500 - note right Postman #Orange - check for 500 - end note -end - -group /v1/regard-device-attribute-value-change - Collection --\\o Postman : {servers, collection-input-list} - Postman -> RDAVC : {requestBody with unknown mountName in object-path} - Postman <-- RDAVC : 500 - note right Postman #Orange - check for 500 - end note -end - -group /v1/regard-device-object-deletion - Collection --\\o Postman : {servers, (object-creation) target} - Postman -> RDOD : {requestBody with unknown mountName in object-path} - Postman <-- RDOD : 500 - note right Postman #Orange - check for 500 - end note -end - -group /v1/regard-device-object-deletion - Collection --\\o Postman : {servers, (object-creation) target} - Postman -> RDOD : {requestBody with known mountName, but unknown class in object-path} - Postman <-- RDOD : 533 - note right Postman #Orange - check for 533 - end note -end - -group /v1/regard-device-object-creation - Collection --\\o Postman : {servers, target} - Postman -> RDOC : {requestBody with unknown mountName in object-path} - Postman <-- RDOC : 404 - note right Postman #Orange - check for 404 - end note -end - -group /v1/regard-device-object-creation - Collection --\\o Postman : {servers, target} - Postman -> RDOC : {requestBody with known mountName, but unknown class in object-path} - Postman <-- RDOC : 404 - note right Postman #Orange - check for 404 - end note -end - deactivate Postman @enduml diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+diagram.unknownTargetObject.receiver.png b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+diagram.unknownTargetObject.receiver.png index 872c1ef1c78835640118f873cd1010ffea1f4dd8..70d26e57fe35e5efc8b4da2beac494ebef1ce65a 100644 GIT binary patch literal 18908 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 literal 80285 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 diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml index 491e93f5..33e4643f 100644 --- a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/simulators/MicroWaveDeviceInventory+simu.unknownTargetObject.unknownMountName.receiver.yaml @@ -59,198 +59,6 @@ paths: life-cycle-state: $ref: '#/components/headers/life-cycle-state' - /v1/regard-device-alarm: - post: - operationId: regardDeviceAlarm - summary: 'Receives notifications about alarms at devices' - tags: - - IndividualServices - security: - - apiKeyAuth: [] - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - notification-proxy-1-0:alarm-event-notification - properties: - notification-proxy-1-0:alarm-event-notification: - type: object - required: - - alarm-event-sequence-number - - timestamp - - resource - - alarm-type-id - - alarm-type-qualifier - - problem-severity - properties: - alarm-event-sequence-number: - type: integer - timestamp: - type: string - resource: - type: string - alarm-type-id: - type: string - alarm-type-qualifier: - type: string - problem-severity: - type: string - example: - notification-proxy-1-0:alarm-event-notification: - alarm-event-sequence-number: 1 - timestamp: '2023-07-11T08:45:02+01:00' - resource: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=LTP-MWPS-TTP-RADIO-1A/layer-protocol=LP-MWPS-TTP-RADIO-1A/air-interface-2-0:air-interface-pac' - alarm-type-id: 'siae-alarms-1-0:radioEquipLinkTelemetryFailAlarm' - alarm-type-qualifier: '' - problem-severity: 'major' - responses: - '500': - description: 'Response in case of errored service requests' - content: - application/json: - schema: - $ref: '#/components/schemas/errorDescription' - - /v1/regard-device-attribute-value-change: - post: - operationId: regardDeviceAttributeValueChange - summary: 'Receives notifications about changes of values of attributes inside the devices' - tags: - - IndividualServices - security: - - apiKeyAuth: [] - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - notification-proxy-1-0:attribute-value-changed-notification - properties: - notification-proxy-1-0:attribute-value-changed-notification: - type: object - required: - - counter - - timestamp - - object-path - - attribute-name - - new-value - properties: - counter: - type: integer - timestamp: - type: string - object-path: - type: string - attribute-name: - type: string - new-value: - type: string - example: - notification-proxy-1-0:attribute-value-changed-notification: - counter: 32 - timestamp: '2010-11-20T14:00:00+01:00' - object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=RF-2146697857/layer-protocol=2146697857/air-interface-2-0:air-interface-pac/air-interface-configuration' - attribute-name: 'performance-monitoring-is-on' - new-value: 'true' - responses: - '500': - description: 'Response in case of errored service requests' - content: - application/json: - schema: - $ref: '#/components/schemas/errorDescription' - - /v1/regard-device-object-creation: - post: - operationId: regardDeviceObjectCreation - summary: 'Receives notifications about objects that have been created inside the devices' - tags: - - IndividualServices - security: - - apiKeyAuth: [] - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - notification-proxy-1-0:object-creation-notification - properties: - notification-proxy-1-0:object-creation-notification: - type: object - required: - - counter - - timestamp - - object-path - properties: - counter: - type: integer - timestamp: - type: string - object-path: - type: string - example: - notification-proxy-1-0:object-creation-notification: - counter: 2 - timestamp: '2023-07-10T12:27:03+01:00' - object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/profile-collection/profile=co-channel-17' - responses: - '404': - description: 'Response in case of errored service requests' - content: - application/json: - schema: - $ref: '#/components/schemas/errorDescription' - - /v1/regard-device-object-deletion: - post: - operationId: regardDeviceObjectDeletion - summary: 'Receives notifications about objects that have been deleted inside the devices' - tags: - - IndividualServices - security: - - apiKeyAuth: [] - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - notification-proxy-1-0:object-deletion-notification - properties: - notification-proxy-1-0:object-deletion-notification: - type: object - required: - - counter - - timestamp - - object-path - properties: - counter: - type: integer - timestamp: - type: string - object-path: - type: string - example: - notification-proxy-1-0:object-deletion-notification: - counter: 14 - timestamp: '2023-07-13T09:31:48+01:00' - object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=RF-2146697857' - responses: - '500': - description: 'Response in case of errored service requests' - content: - application/json: - schema: - $ref: '#/components/schemas/errorDescription' - ######################################################################################################################## # Common Components ######################################################################################################################## From 68918ddd469666e464edbf569b4ec3a2e118a68a Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Fri, 27 Jun 2025 15:51:27 +0200 Subject: [PATCH 2/3] update testcases + datafile --- ...knownTargetObject.receiver.deprecated.json | 103 + ...wdi+data.unknownTargetObject.receiver.json | 43 +- ...testcase.unknownTargetObject.receiver.json | 1726 ----------------- 3 files changed, 105 insertions(+), 1767 deletions(-) create mode 100644 testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+data.unknownTargetObject.receiver.deprecated.json diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+data.unknownTargetObject.receiver.deprecated.json b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+data.unknownTargetObject.receiver.deprecated.json new file mode 100644 index 00000000..a029bc1d --- /dev/null +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+data.unknownTargetObject.receiver.deprecated.json @@ -0,0 +1,103 @@ +[ + { + "mode": "debug", + "serverList": [ + { + "serverName": "dummy", + "dummyUri": "ping.openBackhaul.com" + }, + { + "serverName": "mwdi", + "server": "http://IP_ADRESS:PORT", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "YOUR_BASIC_AUTH_CODE", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + }, + { + "serverName": "mwdi in mwdi+simulator.unknownTargetObject.unknownMountName.receiver.deprecated", + "server": "http://localhost:3012", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + }, + { + "serverName": "mwdi in mwdi+simulator.unknownTargetObject.unknownClass.receiver.deprecated", + "server": "http://localhost:3013", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + } + ], + "collectionInputList": [ + { + "collectionName": "unknownTargetObject.unknownMountName.receiver.deprecated", + "serverToBeApplied": "mwdi", + "mountName": "513250004", + "linkId": "101550001", + "kindOfReference": "dynamic", + "deviceAlarm_mountName": "513250008", + "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", + "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", + "attributeValueChange_attributeName": "external-label", + "attributeValueChange_newValue": "513559992A", + "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" + }, + { + "collectionName": "unknownTargetObject.unknownClass.receiver.deprecated", + "serverToBeApplied": "mwdi", + "mountName": "513250004", + "linkId": "101550001", + "kindOfReference": "dynamic", + "deviceAlarm_mountName": "513250008", + "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", + "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", + "attributeValueChange_attributeName": "external-label", + "attributeValueChange_newValue": "513559992A", + "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" + }, + { + "collectionName": "unknownTargetObject.unknownMountName.receiver.deprecated_simulator", + "serverToBeApplied": "mwdi in mwdi+simulator.unknownTargetObject.unknownMountName.receiver.deprecated", + "mountName": "305250001", + "linkId": "101550001", + "kindOfReference": "static", + "suffixUrlEncodingIsRequired": true, + "deviceAlarm_mountName": "513250008", + "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", + "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", + "attributeValueChange_attributeName": "external-label", + "attributeValueChange_newValue": "513559992A", + "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" + }, + { + "collectionName": "unknownTargetObject.unknownClass.receiver.deprecated_simulator", + "serverToBeApplied": "mwdi in mwdi+simulator.unknownTargetObject.unknownClass.receiver.deprecated", + "mountName": "305250001", + "linkId": "101550001", + "kindOfReference": "static", + "suffixUrlEncodingIsRequired": true, + "deviceAlarm_mountName": "513250008", + "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", + "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", + "attributeValueChange_attributeName": "external-label", + "attributeValueChange_newValue": "513559992A", + "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" + } + ] + } +] diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+data.unknownTargetObject.receiver.json b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+data.unknownTargetObject.receiver.json index ab5b032e..a05ba8f5 100644 --- a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+data.unknownTargetObject.receiver.json +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+data.unknownTargetObject.receiver.json @@ -49,26 +49,7 @@ "serverToBeApplied": "mwdi", "mountName": "513250004", "linkId": "101550001", - "kindOfReference": "dynamic", - "deviceAlarm_mountName": "513250008", - "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", - "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", - "attributeValueChange_attributeName": "external-label", - "attributeValueChange_newValue": "513559992A", - "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" - }, - { - "collectionName": "unknownTargetObject.unknownClass.receiver", - "serverToBeApplied": "mwdi", - "mountName": "513250004", - "linkId": "101550001", - "kindOfReference": "dynamic", - "deviceAlarm_mountName": "513250008", - "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", - "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", - "attributeValueChange_attributeName": "external-label", - "attributeValueChange_newValue": "513559992A", - "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" + "kindOfReference": "dynamic" }, { "collectionName": "unknownTargetObject.unknownMountName.receiver_simulator", @@ -76,27 +57,7 @@ "mountName": "305250001", "linkId": "101550001", "kindOfReference": "static", - "suffixUrlEncodingIsRequired": true, - "deviceAlarm_mountName": "513250008", - "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", - "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", - "attributeValueChange_attributeName": "external-label", - "attributeValueChange_newValue": "513559992A", - "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" - }, - { - "collectionName": "unknownTargetObject.unknownClass.receiver_simulator", - "serverToBeApplied": "mwdi in mwdi+simulator.unknownTargetObject.unknownClass.receiver", - "mountName": "305250001", - "linkId": "101550001", - "kindOfReference": "static", - "suffixUrlEncodingIsRequired": true, - "deviceAlarm_mountName": "513250008", - "deviceAlarm_alarmTypeId": "siae-alarms-1-0:radioEquipConcatenationAlarm", - "attributeValueChange_target": "513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac", - "attributeValueChange_attributeName": "external-label", - "attributeValueChange_newValue": "513559992A", - "objectCreation_target": "513250007/forwarding-domain=VLAN-FD/fc=VLAN-500" + "suffixUrlEncodingIsRequired": true } ] } diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+testcase.unknownTargetObject.receiver.json b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+testcase.unknownTargetObject.receiver.json index ce1d9484..1519d292 100644 --- a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+testcase.unknownTargetObject.receiver.json +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/mwdi+testcase.unknownTargetObject.receiver.json @@ -477,1732 +477,6 @@ } }, "response": [] - }, - { - "name": "/1/regard-device-alarm - unknown mountName (500)", - "event": [ - { - "listen": "prerequest", - "script": { - "exec": [ - "logger.struc(\"\\n===== /v1/regard-device-alarm ============================================\");\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Loading Input Data\r", - "****************************************************************************************/\r", - "var deviceAlarm_mountName;\r", - "var deviceAlarm_alarmTypeId;\r", - "var serverInfo = {};\r", - "var dummyServerInfo = {};\r", - "try {\r", - " let collectionInfo;\r", - " let collectionInputList;\r", - " collectionInputList = pm.environment.get(\"collectionInputList\");\r", - " collectionInfo = ExtractCollectionInput(collectionInputList, \"unknownTargetObject.unknownMountName.receiver\");\r", - "\r", - " deviceAlarm_mountName = collectionInfo.deviceAlarm_mountName;\r", - " deviceAlarm_alarmTypeId = collectionInfo.deviceAlarm_alarmTypeId;\r", - "\r", - " let serverList;\r", - " serverList = pm.environment.get(\"serverList\");\r", - " let serverToBeApplied;\r", - " serverToBeApplied = collectionInfo.serverToBeApplied;\r", - " serverInfo = ExtractServerInformation(serverList, serverToBeApplied);\r", - " dummyServerInfo = ExtractServerInformation(serverList, \"dummy\");\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! Input data could not be loaded.\")\r", - "}\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Processing\r", - "****************************************************************************************/\r", - "\r", - "var alarmEventSequenceNumber = \"\";\r", - "var timestamp = \"\";\r", - "var resource = \"\";\r", - "var alarmTypeId = \"\";\r", - "var alarmTypeQualifier = \"\";\r", - "var problemSeverity = \"\";\r", - "\r", - "//use an unknown mountName\r", - "var dummyMountName = \"dummyMountName\";\r", - "\r", - "try {\r", - " alarmEventSequenceNumber = 32;\r", - " timestamp = \"2023-07-11T08:21:50+01:00\";\r", - " resource = \"/core-model-1-4:network-control-domain=live/control-construct=\" + dummyMountName; //deviceAlarm_mountName;\r", - " alarmTypeId = deviceAlarm_alarmTypeId;\r", - " alarmTypeQualifier = \"\";\r", - " problemSeverity = \"major\";\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! Input data could not be calculated.\")\r", - "}\r", - "\r", - "/* example requestBody\r", - "{\r", - " \"notification-proxy-1-0:alarm-event-notification\":\r", - " {\r", - " \"alarm-event-sequence-number\": 3931,\r", - " \"timestamp\": \"2023-07-11T08:21:50+01:00\",\r", - " \"resource\": \"/core-model-1-4:network-control-domain=live/control-construct=513250008\",\r", - " \"alarm-type-id\":\"siae-alarms-1-0:radioEquipConcatenationAlarm\",\r", - " \"alarm-type-qualifier\":\"\",\r", - " \"problem-severity\":\"major\"\r", - " }\r", - "}\r", - "*/\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Setting Local Variables and Preparing the Request\r", - "****************************************************************************************/\r", - "try {\r", - " let servicePath;\r", - " servicePath = \"/v1/regard-device-alarm\";\r", - "\r", - " let server;\r", - " server = serverInfo.server;\r", - "\r", - " let uri = server + servicePath;\r", - "\r", - "\r", - " let requestBody;\r", - " requestBody = ''\r", - " + '{'\r", - " + '\"notification-proxy-1-0:alarm-event-notification\":'\r", - " + '{'\r", - " + '\"alarm-event-sequence-number\": ' + alarmEventSequenceNumber + ','\r", - " + '\"timestamp\": \"' + timestamp + '\",'\r", - " + '\"resource\": \"' + resource + '\",'\r", - " + '\"alarm-type-id\": \"' + alarmTypeId + '\",'\r", - " + '\"alarm-type-qualifier\": \"' + alarmTypeQualifier + '\",'\r", - " + '\"problem-severity\": \"' + problemSeverity + '\"'\r", - " + '}'\r", - " + '}';\r", - "\r", - " pm.variables.clear();\r", - "\r", - " pm.variables.set(\"uri\", uri);\r", - " pm.variables.set(\"requestBody\", requestBody);\r", - " \r", - " pm.request.headers.upsert({ key: \"Authorization\", value: serverInfo.authorizationCode });\r", - " pm.request.headers.upsert({ key: \"operation-key\", value: serverInfo.operationKey });\r", - " pm.request.headers.upsert({ key: \"user\", value: serverInfo.userName });\r", - " pm.request.headers.upsert({ key: \"originator\", value: serverInfo.originator });\r", - " pm.request.headers.upsert({ key: \"x-correlator\", value: serverInfo.xCorrelator });\r", - " pm.request.headers.upsert({ key: \"trace-indicator\", value: serverInfo.traceIndicator });\r", - " pm.request.headers.upsert({ key: \"customer-journey\", value: serverInfo.customerJourney });\r", - "\r", - " pm.request.headers.upsert({ key: \"Accept\", value: \"application/json\" });\r", - " pm.request.headers.upsert({ key: \"Content-Type\", value: \"application/json\" })\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! Local variables could not be set.\")\r", - "}\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Functions\r", - "****************************************************************************************/\r", - "function ExtractServerInformation(serverList, searchedServerName) {\r", - " try {\r", - " for(let i=0; i Date: Fri, 27 Jun 2025 15:53:55 +0200 Subject: [PATCH 3/3] add splitted testcases --- ...knownTargetObject.receiver.deprecated.json | 2133 +++++++++++++++++ 1 file changed, 2133 insertions(+) create mode 100644 testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+testcase.unknownTargetObject.receiver.deprecated.json diff --git a/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+testcase.unknownTargetObject.receiver.deprecated.json b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+testcase.unknownTargetObject.receiver.deprecated.json new file mode 100644 index 00000000..74146193 --- /dev/null +++ b/testing/2_functional/unknownTargetObject/v2.0.1/Receiver/_deprecated-services tests/mwdi+testcase.unknownTargetObject.receiver.deprecated.json @@ -0,0 +1,2133 @@ +{ + "info": { + "name": "mwdi+testcase.unknownTargetObject.receiver.deprecated", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "UserInput", + "item": [ + { + "name": "for loading user input", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "console.clear();\r", + "logger.struc(\"==========================================================================================\");\r", + "logger.struc(\"===== mwdi+testcase.unknownTargetObject.receiver.deprecated ==========================\");\r", + "logger.struc(\"==========================================================================================\");\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Loading Input Data from File\r", + "****************************************************************************************/\r", + "var inputFromFile;\r", + "try {\r", + " inputFromFile = data\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Input data could not be loaded.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Environmental Variables \r", + "****************************************************************************************/\r", + "try {\r", + " pm.environment.clear();\r", + "\r", + " let mode;\r", + " mode = inputFromFile.mode;\r", + " // Mode to be applied while running this testcase collection \r", + " // \"analysis\" -> human does detailed analysis of response bodies etc.\r", + " // \"testing\" -> automated approval based on binary result\r", + " // \"debugging\" -> support for programming the testcase collection\r", + "\r", + " let logLevel;\r", + " switch(mode) {\r", + " case \"debugging\":\r", + " logLevel = \"debug\";\r", + " break;\r", + " case \"analysis\":\r", + " logLevel = \"log\";\r", + " break;\r", + " case \"testing\":\r", + " logLevel = \"error\";\r", + " break;\r", + " default:\r", + " logLevel = \"debug\";\r", + " };\r", + " // Level of detail of the logging; find more info in pre-request script on the collection's level\r", + "\r", + " let serverList = [];\r", + " serverList = inputFromFile.serverList;\r", + " // list of addresses of applications, controllers etc.\r", + " // serverName : key attribute for identifying the servers\r", + " // dummyUri : http address that shall be addressed by bare processing Requests\r", + " // server : part of the URI that is comprised from protocol, IP address and TCP port\r", + " // pathToControlConstruct : part of the URI that is identical for all Requests that are addressing into the device's data tree\r", + " // authorizationCode : authentication that has to be sent in case of BasicAuth protection (e.g. OpenDaylight NBI)\r", + " // operationKey : ApiKey that has to be sent in case of addressing a MW SDN application (e.g. MicroWaveDeviceInventory)\r", + " // userName : user header to be sent in case of addressing a MW SDN application\r", + " // originator : originator header to be sent in case of addressing a MW SDN application\r", + " // xCorrelator : x-correlator header to be sent in case of addressing a MW SDN application\r", + " // traceIndicator : trace-indicator header to be sent in case of addressing a MW SDN application\r", + " // customerJourney : customer-journey header to be sent in case of addressing a MW SDN application\r", + "\r", + " let collectionInputList = [];\r", + " collectionInputList = inputFromFile.collectionInputList;\r", + " // list of inputs to individual test case collections\r", + " // serverToBeApplied : server that shall be addressed in the respective request/test case\r", + " // mountName : mountName of the device that is to be validated\r", + " // uuid of the object that is to be validated\r", + " // localId of the object that is to be validated\r", + " // linkId : linkName of the link that is to be validated\r", + " // linkPort : id of the linkPort that is to be validated\r", + "\r", + " pm.environment.set(\"mode\", mode);\r", + " pm.environment.set(\"logLevel\", logLevel);\r", + " pm.environment.set(\"serverList\", serverList);\r", + " pm.environment.set(\"collectionInputList\", collectionInputList);\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Environment variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Collection Variables \r", + "****************************************************************************************/\r", + "try {\r", + " pm.collectionVariables.clear()\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Collection variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Local Variables and Preparing the Request\r", + "****************************************************************************************/\r", + "try {\r", + " let uri;\r", + " let dummyServerInfo;\r", + " dummyServerInfo = ExtractServerInformation(inputFromFile.serverList, \"dummy\");\r", + " uri = dummyServerInfo.dummyUri;\r", + "\r", + " pm.variables.clear();\r", + "\r", + " pm.variables.set(\"uri\", uri);\r", + "\r", + " pm.request.headers.upsert({ key: \"Accept\", value: \"application/json\" });\r", + " pm.request.headers.upsert({ key: \"Content-Type\", value: \"application/json\" })\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Local variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Functions\r", + "****************************************************************************************/\r", + "function ExtractServerInformation(serverList, searchedServerName) {\r", + " try {\r", + " for(let i=0; i log -> info -> warn -> error -> struc -> none", + "// It creates \"logger\" global variable which can be used anywhere in nested collection scripts", + "", + "const logLevels = [\"debug\", \"log\", \"info\", \"warn\", \"error\", \"struc\", \"none\"];", + "", + "const shouldLog = (level) => {", + " return logLevels.indexOf(level) >= logLevels.indexOf(pm.environment.get(\"logLevel\"));", + "};", + "", + "logger = {", + " debug: (message, ...optionalParams) => {", + " shouldLog(\"debug\") && console.log(message, ...optionalParams);", + " },", + " log: (message, ...optionalParams) => {", + " shouldLog(\"log\") && console.log(message, ...optionalParams);", + " },", + " info: (message, ...optionalParams) => {", + " shouldLog(\"info\") && console.log(message, ...optionalParams);", + " },", + " warn: (message, ...optionalParams) => {", + " shouldLog(\"warn\") && console.log(message, ...optionalParams);", + " },", + " error: (message, ...optionalParams) => {", + " shouldLog(\"error\") && console.error(message, ...optionalParams);", + " },", + " struc: (message, ...optionalParams) => {", + " shouldLog(\"error\") && console.log(message, ...optionalParams);", + " },", + "};", + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ] +} \ No newline at end of file