From 6abd2a7e0e1c6c233785d3ae16a1a447690cff90 Mon Sep 17 00:00:00 2001 From: ddCat <2695092045@qq.com> Date: Wed, 9 Sep 2026 09:46:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(provider):=20=E6=96=87=E6=9C=AC=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=20-=20=E5=B0=86=E7=B3=BB=E7=BB=9F=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E5=86=99=E5=85=A5=E4=B8=8A=E6=B8=B8=E8=AF=B7=E6=B1=82=E5=B9=B6?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- backend/internal/protocol/manifest.go | 17 +++++- .../protocol/official_catalog_test.go | 49 ++++++++++++++++++ plugin-packages/generate-catalog.mjs | 6 ++- ...ogle-gemini-generate-content.yingce-plugin | Bin 8319 -> 8500 bytes .../openai-responses.yingce-plugin | Bin 8018 -> 8315 bytes 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/backend/internal/protocol/manifest.go b/backend/internal/protocol/manifest.go index 2aa438b1f..acc45bf56 100644 --- a/backend/internal/protocol/manifest.go +++ b/backend/internal/protocol/manifest.go @@ -963,7 +963,13 @@ func manifestRequestValues(request GenerationRequest) map[string]any { userContent = append(userContent, map[string]any{"type": "audio_url", "audio_url": map[string]any{"url": val}}) } } - messages := make([]any, 0, len(request.Messages)+1) + messages := make([]any, 0, len(request.Messages)+2) + // instructions 是统一的系统指令字段,但多数 OpenAI 系协议只映射 request.messages。 + // 系统指令必须进入消息数组,否则会被静默丢弃;带独立 system 字段的协议(Claude、 + // Gemini、Responses)在各自模板里过滤 system 角色,不会重复发送。 + if instructions := strings.TrimSpace(request.Instructions); instructions != "" && !hasSystemMessage(request.Messages) { + messages = append(messages, map[string]any{"role": "system", "content": instructions}) + } for _, message := range request.Messages { if strings.TrimSpace(message.Role) == "" || message.Content == nil { continue @@ -1028,6 +1034,15 @@ func manifestRequestValues(request GenerationRequest) map[string]any { } } +func hasSystemMessage(messages []Message) bool { + for _, message := range messages { + if strings.EqualFold(strings.TrimSpace(message.Role), "system") { + return true + } + } + return false +} + func requestAsManifestValue(value any) (any, error) { encoded, err := json.Marshal(value) if err != nil { diff --git a/backend/internal/protocol/official_catalog_test.go b/backend/internal/protocol/official_catalog_test.go index 168545f79..1d81c9ed8 100644 --- a/backend/internal/protocol/official_catalog_test.go +++ b/backend/internal/protocol/official_catalog_test.go @@ -480,6 +480,55 @@ func TestOfficialOpenAIVideosDeclaresAuthenticatedResultDownload(t *testing.T) { } } +// 系统指令必须真正到达上游:只映射 messages 的协议要收到 system 消息, +// 有独立 system 字段的协议要用该字段且不能在消息数组里重复发送。 +func TestOfficialTextProtocolsDeliverInstructions(t *testing.T) { + tests := []struct { + name, packageName, providerID, messagesField, instructionField string + }{ + {name: "openai-chat", packageName: "openai-chat-completions.yingce-plugin", providerID: "chat-completion", messagesField: "messages"}, + {name: "deepseek", packageName: "deepseek-chat.yingce-plugin", providerID: "deepseek-chat", messagesField: "messages"}, + {name: "atlascloud", packageName: "atlascloud-chat.yingce-plugin", providerID: "atlascloud-chat", messagesField: "messages"}, + {name: "openai-responses", packageName: "openai-responses.yingce-plugin", providerID: "openai-response", messagesField: "input", instructionField: "instructions"}, + {name: "anthropic", packageName: "anthropic-messages.yingce-plugin", providerID: "claude-api", messagesField: "messages", instructionField: "system"}, + {name: "gemini", packageName: "google-gemini-generate-content.yingce-plugin", providerID: "gemini-generate-content", messagesField: "contents", instructionField: "systemInstruction"}, + } + const instructions = "只输出一个 JSON 对象" + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + adapter := officialPackageAdapter(t, test.packageName, test.providerID) + spec, err := adapter.BuildCreate(context.Background(), RequestContext{Request: GenerationRequest{ + Capability: CapabilityText, Model: "model-test", Prompt: "一句话故事", Instructions: instructions, + }}) + if err != nil { + t.Fatal(err) + } + body := manifestTestBody(t, spec) + encodedMessages, err := json.Marshal(body[test.messagesField]) + if err != nil { + t.Fatal(err) + } + carriesInstructions := strings.Contains(string(encodedMessages), instructions) + if test.instructionField == "" { + if !carriesInstructions { + t.Fatalf("%s dropped the system instruction: %s", test.providerID, encodedMessages) + } + return + } + if carriesInstructions { + t.Fatalf("%s duplicated the system instruction into %s: %s", test.providerID, test.messagesField, encodedMessages) + } + encodedInstruction, err := json.Marshal(body[test.instructionField]) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(string(encodedInstruction), instructions) { + t.Fatalf("%s did not map the system instruction to %s: %s", test.providerID, test.instructionField, encodedInstruction) + } + }) + } +} + func officialPackageAdapter(t *testing.T, packageName, providerID string) Adapter { t.Helper() data, err := os.ReadFile(filepath.Join("..", "..", "..", "plugin-packages", packageName)) diff --git a/plugin-packages/generate-catalog.mjs b/plugin-packages/generate-catalog.mjs index a8e1c976d..a5b9d0668 100644 --- a/plugin-packages/generate-catalog.mjs +++ b/plugin-packages/generate-catalog.mjs @@ -112,7 +112,9 @@ add({ id: "openai-responses", providerId: "openai-response", name: "OpenAI Responses", vendor: "OpenAI", capability: "text", baseUrl: "https://api.openai.com", auth: bearer, params: textParams, create: jsonCreate("/responses", { - model: ref("request.model"), input: ref("request.messages"), instructions: omit(ref("request.instructions")), + model: ref("request.model"), + input: filter(ref("request.messages"), "message", ne(ref("message.role"), "system")), + instructions: omit(ref("request.instructions")), temperature: omit(ref("request.providerOptions.openai-response.temperature")), top_p: omit(ref("request.providerOptions.openai-response.top_p")), max_output_tokens: omit(coalesce(ref("request.extra.max_output_tokens"), ref("request.providerOptions.openai-response.max_output_tokens"))), @@ -156,7 +158,7 @@ add({ id: "google-gemini-generate-content", providerId: "gemini-generate-content", name: "Google Gemini generateContent", vendor: "Google", capability: "text", baseUrl: "https://generativelanguage.googleapis.com", auth: { type: "google-api-key", field: "apiKey" }, params: textParams, create: jsonCreate("/v1beta/models/{{model}}:generateContent", { - contents: map(ref("request.messages"), "message", { + contents: map(filter(ref("request.messages"), "message", ne(ref("message.role"), "system")), "message", { role: conditional(eq(ref("message.role"), "assistant"), "model", "user"), parts: [{ text: ref("message.content") }] }), diff --git a/plugin-packages/google-gemini-generate-content.yingce-plugin b/plugin-packages/google-gemini-generate-content.yingce-plugin index afccae8ff0734291ef39f08e14d9a98dd97e0ec3..00aedd4dc6ff1cde10a1bc2b723eeb96c73161d4 100644 GIT binary patch delta 8171 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 JoGJbn`5)4e!pZ;u delta 7962 zcmV+#ALZb*LjOPwP)h>@6aWAK2mrN4A+Ze+0S>iBAzi$CgK+o^001U2lPm!le``}4 zNAkOV#h#LnMoRM0l}Z(7`*Pf!ZOSHBb>*VaA`M~_y|TMQXLPrh9t2dwTkr4}{ON*<^|cpOdtdk%T14 z5Lr~onQTTS8CB43ZqcO;x^qvffBqT@eei)mD@%H{svkUW)*GSFfS@hiZq{E4LuY?K zd>BhIS_4T&Yrv#65a+~VzZJiQ9m8_=s+1tIxu+|#e!W2#9wDAezA+cu_4|5tQ~0Z> z5aEkU|3c`bs^*l_(WpU2x=K=FCYcwLB*K{zbCME?XVWH$`4`&v*V|9`f9b-ugLA+d z_=-#!NObNItsfwG_~PXeA$s-WaiWURbT&a!N_2XfeH03(JxVin55lr~(#@@vC-hc> z-rCk4KLHwaxvcGM(K{7-u!0D96YWx^)u@_Rb4}o1!Zo3_U#CAT!UsJn(e>x}vHZOG zdS18&SOWtCg3nKY#6b9ee}e3=q>#8wRQS;D@50Z);UNJafQ9F_>Q9=rB0o*Lzee|N z;OWj)UmlvZ1+7-&8{kiU_l0)#+a%YU#cu+k``Y!z#zW8j)xAN1r-@PiK2iF zD2QWxUm3Oc=S)*HU;-MSD8Yr`23jtG;^@uq=+ghRmvh?8F1=l*e~mkIzS3IR*5+R6 zZ|>02mUWnv0siuFRmx@*7q@izCp=A=QdE+TdeK_H)IoV#dA3>Kv}gfh4$UGj6U52n z)8oLVMalzi&(3OVue91zdhnA?BAXk_`EE7=+FFh8q)XpwclT_qiQkN=*{=xaPXfD4 zI``Y)D1K)1YA&xje>P~3i*)n9sGQjYfh{|D%BC2OD9hrMlO;!k)66H=0?|J4>P zy`t5JV7e{>WAVwX6la2G$G;?T^_o}H9xP6&U7XhzpSE^ZTX*d{lZldpdmv*ISvf7L zHcgwD2PMiJ5#C$znI=8cCeG9bNs?YJKPaC)4k?}L|DRQ&dcVB7y--7XL-ygM$%f`#B zm1yN|DAcSi>g(IBm3{80ow(p*w7KQq56k*b-?bjC0;7qk--*ipN;y%6e}J$GcKVWT?7{18)^=JCZ)m$q&Dt}5D)UX|b8I$HBPe(AP@7xT8$WB6 zAAuSD%^Q%~`}9$1;B~+gM$$x`%qCDlu`oK%aLfhHiRvT=9@nXQ2pAz|WGY8E9Wj?n zNpTUMWb{iVoAKbIV$4mjmc7M!jwZ1FlB z%#{Dee*((M19NgY!UOfKwre6 zCwE1B|FJz0M@K!FlDlPvXC#Xej>Y8+GdVCye^?2(Hvg3F-)*l{F>#NbNIkKBc6PkU zel~laQ$JfB_Sx??I4A@qfmWR1$t1)r$R3)F#~7+hGkO)G+7V`dtFzkr1`mS}18KFa z-F*Q^iLwY517Q==JjjZo>|VzBz0uv*`u;k^d3|?_e?uC|>nZK=&rnh!p~IrK@N6lJY-$K1Xp~FMmVna)=@8opq<;8j z(04xKOHOsUHw9}2{$_&u6GC$rQz>QG@Vckw*2ivIV~UHI{W6=if1B-< z2m0=AD8#dGZDE1GLO~UkucG`}v4SF+CJ9N5GQ%_dbpAdvGAwY; zAkS~s9zwk#pl!2UpP8;%1vQVpe}|oPb6l}#C@IsetAMl5mxw=v3YQ3rZrziCs=yf ztgi|rlgMSE`a~WNZqf1qeF6o`YO8Sz$|cSKJu0==>)a)`7JmkTxuQ9ffBN-?w)R@9 zRJkvw%av9c9Qh*S_S3(BoBPkuh0o8N8#_OEVd!t?E{}|zxp-mZ(%_kqvCAWamqx%7 zeuh$=7cRX^;;UAYTUH}(+lb?@be^;W_AKDK}STOVb5sc_D z!E)6gvp)O6D!_~ijkVT5e`f4YJy?bhv$CAwO)K~?>-8CJZN2@hj4P~F1s|;Igpen2 zUq3S3Rqf>*d~h@3)`080qJ#@)TU@~e6ckHjE1p@E>@u$Dq-Oe zZW3&c@_VsP;-WrJ1F5ZSh7Q{Amw$rSafAIcx=0TyfvIY?g zcSA^o!gcdN+u49W*`38=F;rn_IwS~?DoOu_K+7r*Av^_HLL6$tR6Z$XqE|l&pF$jP zSpe(amgJbsI{|Ljb|^=^YM=TExYv*Ps+b3NAUjAz1=`qe?W}Tef+%rW%BjZ2?p;@I z%Dh%L5(H)&pag@OfAeyX-lzOFIGUZ1xbV1Z5H6h?JbV6JB%MHWMGVYUAZ3{lL4UBS zEgph}>%}r_4%j!!P29RXZD*5if|IJWXDf8G0*NK&F6Lc*#`(+MJ0`9fxTICit&=OUHi{5Vut=h51L9Ev+3 zrWE49#FuQ{qNz2*c-(UWH}lLa9kyq|3J&6Sh2T-N^Eihc8+{!&&@yG#_w+(NChLJh zW}d@ML9{)Ns+S0v9| ztY5)Af8(+4!kt_yzbRZVZx=A2>sLZPuL}~)81KD>8}}veeN88w6uN}l&5PdkRr#dNP!&0zEe4PkVCg@;32lRy@e_J?X3jlIGn6tM)B&34#L|3xu{V#Yk zCtzsDHHqx9#YaaDYWDmx5Nk955=ht>E&AuQ4m3VRa-DXV~q?BXJ(WzE1miupy+~JNs-+I;>Ggq~8HNxfHaJ{V)ku{CXW zvE=KNgHpfX#Lpo_@4>Y9hP__c$O8G?f7%NRNC0~or-Ma%+TCvu4=Q)UY}(lEW_`!y zf#mG5c}J9W&d(iy(Nk`7w+HD#6wDmkNhJ6|T?()-YxLfEOz#5*z%Z>+5dZ+rQInqz7JqLPM;3nPSM)l0 z*p={1l1CIpVhNjNcOeLzl~&mDv}f9OCv!`84+QvRK^OesZ(6j-)Z2sG@Y_n7xIHV1n zGm8^hBUR2X|4ce+#oXL{Ku}EufW23dYM7wi_owdxe!v-db(OQ>& zYCXQxUVrXweCEzCwAa?Wg{#f_vtOq^W86yFN&zT!pWka*B7eu>;&8FO{;+j>&28N9 zZmv@S?%GXn=>;#q+gfZbPlFhD@p9|&db57Hb^We)VX<}V3oVoE#uS}_K{^8&&7G^c zv&-#9Iy7y#jJkQFm?5 zyYbY!{Lo#v-+%sLS~~;Q+G!J{SmQd(aUnPI=UCHU*xP4{cZbJ2kSFL{GfKyDxEcRhUE`Rrfz@UaA$8Lp<{d!wC>h# zw$~nLf7NY6`{2~SuzS*R%J!jjnlUoZ8hO1qQPC%i6o1tV7K5G2mI?uni%-38KHvRu z!<}8>vFp?huK-MY@^5+(%#141R7r%yHdt$nJsHtO!Tm*B(Q zsk!$aNQf*umJZ+(WU) z-UWC0Lk-)8psD5OO)x(Rr5GtK&gkQq>x zF-$6!fkeehVGI-vcnRIRGc(@ub8quUck6qON2xqomX7v2yyZ0x@GC-c%`5{jsJ(0 zF>X$fIe7litvz?wZb2YNIgDl}OJg-YHr%en=J#u9|=Gxz=zSj^4MRX7yA^@Zl{nWO1 zVX58t$(#QU)M>wb3AV@f0^&T_j9{Nk6%0rva_Fec@Br?u!vmQpMOk+yS%0_NZj1*z zi-yjX4aQ0@m-A+pB6@(`+;D81RBMzMQP@(rR_2T7Rv|yhQiD zW8u~pxJzZ0=rVrWq((6#&Ue&P!Jl(dtW0oF1s4ME z;*ajejos^O^lp*q%VU|IhQ=0hPoss^*V9-of_ol^qTmuZyW&kv(-aquPe^8(jXRh( z)TY~OaJcSZO1d=T-MdfEV>pcIy%B`z7F_1xYKS*PNYm0}ibm-yx_|30+8g&E>457n z{f69_U4ifX1h+qAv_0irf2rBv_=3)^uiLlU-#vEMcAA^@_Wf!1;-m16LUR`Sr` z%)YTJNC;T&@_gNW`9-&xfuD_~;81faHVa(4lFb@M&d7xk8xZ>WS{Fw&8l|OMm3ZR&EYRnWD#2l{+Q_ffYPVB@2u1J`PJ9bkhAr#g8{Et7M&o z9l<{H#t3r>X#?$ZhQufA{FV+0l99;TKgGLK7^n6Z{7%hQ@WR!h=kxZ-a5qbGelnM1 zIYF=SN|7A-*qJhOoyMPl#gfDUD`TB_9JVG%J<3jEq+1gmjei-MELA2Zozvz-k=*qJ zevZ)HAGbN#Odc zeshaf3&_3c4(uAu&8Oa1&)i2>n~iH&-+?>nOndDK5Nbvlb{yCd^RVf_wS{gsSg4!- z8SgTUhBr6ee1B1c%NOwZ`_Rxyjp_zBmgeRyxIJkY_~h0?g4(~-HFv&&k?w-S-&0`uEDPg+|$ zbmP=udmlIR2D!@3VP)jnbnD_A?xeM6&H9pN6m#Vg+<&Q2&#f!&+?IP6u3t;7#uc~# zQYGA-+U~tN-PdV#k~*6z+Wx%ZEx+*Q*XV)ZF3z{+;54|zG=BR}uu=Z!*opU!934G= z_{6cl9X&lXdgT2RL#GZO85%u3bokT|?4|Dz(~j#!a~uwCjW09O3pcql)*phawSSy` z{{(E*mw%}eX#1BnckSEVuWMKfpd3<|D`5GOZTVn$d**3yr(~B-QcncKu^jjHB7FEa z=4o1^gAczJG3_ni+kG^LEu=69AEd;FJ$GT^z9Y0t-m?qvLF0*r1-8?RGR!;~5;>H> zOPNT;IK!%FI73t0?vo8X1IfjkIfWdoFr5&TyMNO=Zf%|&wRcw9GmpR|@W$@vE8bVj zVAAf?Rk)vn+019F&3X+darGj&)SX|3a}P(u;R<*02V36iefX74Tqctt30Lv_a8c8S zxtcy41@OCA)yH#(5aPCm1j$v|fSm4OI3T%9?$e*;l^{j_po`Y|Bh36te?Y?(`@4{u zRDbRdS@QEonZ8Y@jM9erPlS?gB-*K?hu=MZG*!r9Olz^?x#nHkhK10cnj=M#aN6lQ z2xiz@ec(QTEp2{xX5M`;5BV&nO8$ht6DV6Ytb%FV^xAnyJA2!TCr_}G0Ku0vSI~RpZ7u!f3Yx*+1>3C19aDua9As z0Q*@@SRlac-?R)8g>c0-{Jtvv7{MRa&u+KMnr{IpV*8S`Xaoe2bAT@rMKf>c$ZQLe!_V z9AuPeECq}9Zfvr=n2`d6)vu9=Z0(PE3P~};;uu@Mi#Gt>5)EWv-QF!s0{OZ!Tm}O6 zJ+GudoM1LV6JN!&Mp4MFHmWE}xd#&&UYTfU1nzt_2CKy?Y!zVCJ}nk7)qgIm-n+Rn z9Ji}ISb_8QX*vae6D?+d@hdoWRI=hLwqGDx@PaDYq`-O{7fH4Ui7lpr*#>w2r^Wk3Wu$i#kK^?!xGB=FTn&l4Yi zZy}#|9>i( z#U&Iz4oP4X+%Y1&64&b~b%+MfN~99Icwv%cQRJNo^>0!jDn_&SB~k@rPffZ}CwOqu znI)|sbi*|I0;Mx&`WU4f&eAs|QUUSTDe?0({^CRxNB(C7QhyvSRtaj}>CMB@6YtU& z5A^TFI6xK^KY$DcG?oxTYY4>-96+bw@CXcxK}<<01{*NcSUc(S|DKK_R*X66!GaI= zP~esCA^0VBG0c_k^GiSshG895@^j<>E<2{E54DDB1~{u+Q}#E434a_Ys@M5%1lb54 zS>=RNH^A~82!9$zxKR{R73pPoDklplBw%WkfFh|v8-r1!tz_GhYsc_Y^h4L^sbnHW z=rpM8g_MY!2D9jUjRj8>GL0%v!jg-=p3MUX9{_MwLwz^y}ZI1QCKQ0*u+SEr=@qZdS;c3;M^=%AOZi02`|8UBjFlWgwUC7!>w!M3o=Dm;KeHesl=a{!%NVC&7R3SwV#L*h zan8EUB{BmN0<)+RjM$l?57jcqm7UZN6ctGzLVqsC$3n6x{!oHVj?CC``OZvRfGa!S{B z#N8@VMSmCUjw5-}1*nMGj?o%hgptg)tA)s-K+64hpRVrIX3Fnn&LoDjxJH<+rx_LD zF@NcV28CStyo&bs3(bkX>JW<&Ol&{(79{tiHBD&uQCTXmXC3!H8aSyvX&XVi_EX`g z;AEYpNf=)iqJ^(NQVu4%Ee@o~Q%~M%KdBcDrvMsBj(zwns*-e5R;7OG#E&zgBVZPr zVR08`Ss)U}@()!4*eN(U6$5-sauRkQe1AgW7Sq*)nU!H;%G(o%hs91=4h-YRj~tAK zdkBQ7IQTg>&qTeTPATFmK)>Q*IznG+{Ufj!Ixr!aqyrh^6<11tyE>~7KwTYpkt=RT zZc&V@14{(BI}LqwMHRbynBOi_zVC5CNYz~ATb}cMj>5*z%Z>+5dZ+rQ2+o900000000010001_ Qfjg59As`009{>OV0NT=YGynhq diff --git a/plugin-packages/openai-responses.yingce-plugin b/plugin-packages/openai-responses.yingce-plugin index f0ee2178b0875146e48eae605bcc55dcc802e625..42b7856365825944691b05128bbce3cad5aaced7 100644 GIT binary patch delta 8030 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 NLP3GhO7Y*-{{k|CUa9~9 delta 7690 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ⅆ;^nH!s_R&F8XaeUOi- z2F|C^(2&DTt8noEO@DEmXWnYBIjdcwB>^BSGWmBP>zGB~ya==*jp^%)A;FXbK8+wV z1A)Xo%4{C)Pl;1Jk~(Wg`{15G5oo;Aj~66@NR=|=T*&nXIl3YJ{5+X?JEv(n+!-|N z>OM1fGLW>tbdosOw>@{KABDd<1pVl94hkwzCl1se#!V}IeRYy#J*l&V)`aL>T{d*@?$?wPfsN#2w zE^NO`zweY-b&J1gALj@HuoA%6=T`5I;QIc2f0pP-!P zbtsr5MU`uP@rCrtRZ$5lDj#UQ03K+W{78sCjczo8z%DsM59br3F22HQ zCPn{jrC6|O&ojx`_|ANkr?pmdX|ft5#Z>8Dt?>9&b0t3KT2F7*@2Xo>O%hC~2cK7W!-F5ke=n+@NUZV=&cO~S#(WR zhkpD31;dhZk>xLbnLt+_>MBc+X~qSTUw>6;aUMGV;$@)W+TT@=F=g=(!9iYQg%ZWw z@W!Vlp%N2@{Z{(4ZJHlz+P|SgD7y<;`KV5o$rTyKL7Ce~fq=t1{_nLENDbvNsFWIL6)yg8<`kC50`k6bXm`J#O`Fs(VJkXDkS z4@rj)o3}66)1ZlwY}V1t(3@YVV#YuH=iV|ANs&zxN~@z;4Z@0?0JPE!ZCMtQFtO-p zM<-qTxyOoeHAE?^JN-THe#mR!JHe|Vx7uksF|w1DHu~7DMXS5f_{G2Va3yqo`RRpz zc_&-l<#qf;_Aqa(>F($-8F$?T3= zyeT%Jge+O=Pf{<uUWA_h^ zz&75vAS)r_0IZBf1XnDdo`6_E=&f!Mnj`p?ZTIGm_6@(>2a%`PCVl_{1DP@WNzy>| zcSI&wlI2=YIVHl3hqW266E(+aTyBnaEh7bV zllVywtocSgF>)YF!?W|A<^pyf@;Q)M3iO3X9%)vgWW^PLw~x9ZB|t<8