IX; foreach ($messages as $id => $message) { unset($this->messages[$altDomain][$id]); $this->messages[$domain][$id] = $message; } if ([] === ($this->messages[$altDomain] ?? null)) { unset($this->messages[$altDomain]); } } public function addCatalogue(MessageCatalogueInterface $catalogue): void { if ($catalogue->getLocale() !== $this->locale) { throw new LogicException(\sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s".', $catalogue->getLocale(), $this->locale)); } foreach ($catalogue->all() as $domain => $messages) { if ($intlMessages = $catalogue->all($domain.self::INTL_DOMAIN_SUFFIX)) { $this->add($intlMessages, $domain.self::INTL_DOMAIN_SUFFIX); $messages = array_diff_key($messages, $intlMessages); } $this->add($messages, $domain); } foreach ($catalogue->getResources() as $resource) { $this->addResource($resource); } if ($catalogue instanceof MetadataAwareInterface) { $metadata = $catalogue->getMetadata('', ''); $this->addMetadata($metadata); } if ($catalogue instanceof CatalogueMetadataAwareInterface) { $catalogueMetadata = $catalogue->getCatalogueMetadata('', ''); $this->addCatalogueMetadata($catalogueMetadata); } } public function addFallbackCatalogue(MessageCatalogueInterface $catalogue): void { // detect circular references $c = $catalogue; while ($c = $c->getFallbackCatalogue()) { if ($c->getLocale() === $this->getLocale()) { throw new LogicException(\sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); } } $c = $this; do { if ($c->getLocale() === $catalogue->getLocale()) { throw new LogicException(\sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); } foreach ($catalogue->getResources() as $resource) { $c->addResource($resource); } } while ($c = $c->parent); $catalogue->parent = $this; $this->fallbackCatalogue = $catalogue; foreach ($catalogue->getResources() as $resource) { $this->addResource($resource); } } public function getFallbackCatalogue(): ?MessageCatalogueInterface { return $this->fallbackCatalogue; } public function getResources(): array { return array_values($this->resources); } public function addResource(ResourceInterface $resource): void { $this->resources[$resource->__toString()] = $resource; } public function getMetadata(string $key = '', string $domain = 'messages'): mixed { if ('' == $domain) { return $this->metadata; } if (isset($this->metadata[$domain.self::INTL_DOMAIN_SUFFIX])) { if ('' === $key) { return $this->metadata[$domain.self::INTL_DOMAIN_SUFFIX]; } if (isset($this->metadata[$domain.self::INTL_DOMAIN_SUFFIX][$key])) { return $this->metadata[$domain.self::INTL_DOMAIN_SUFFIX][$key]; } } if (isset($this->metadata[$domain])) { if ('' == $key) { return $this->metadata[$domain]; } if (isset($this->metadata[$domain][$key])) { return $this->metadata[$domain][$key]; } } return null; } public function setMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->metadata[$domain][$key] = $value; } public function deleteMetadata(string $key = '', string $domain = 'messages'): void { if ('' == $domain) { $this->metadata = []; } elseif ('' == $key) { unset($this->metadata[$domain]); } else { unset($this->metadata[$domain][$key]); } } public function getCatalogueMetadata(string $key = '', string $domain = 'messages'): mixed { if (!$domain) { return $this->catalogueMetadata; } if (isset($this->catalogueMetadata[$domain])) { if (!$key) { return $this->catalogueMetadata[$domain]; } if (isset($this->catalogueMetadata[$domain][$key])) { return $this->catalogueMetadata[$domain][$key]; } } return null; } public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->catalogueMetadata[$domain][$key] = $value; } public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages'): void { if (!$domain) { $this->catalogueMetadata = []; } elseif (!$key) { unset($this->catalogueMetadata[$domain]); } else { unset($this->catalogueMetadata[$domain][$key]); } } /** * Adds current values with the new values. * * @param array $values Values to add */ private function addMetadata(array $values): void { foreach ($values as $domain => $keys) { foreach ($keys as $key => $value) { $this->setMetadata($key, $value, $domain); } } } private function addCatalogueMetadata(array $values): void { foreach ($values as $domain => $keys) { foreach ($keys as $key => $value) { $this->setCatalogueMetadata($key, $value, $domain); } } } } JFIF (! &!2!%)+...383/7(-.+  -& %----+.+-------------------------------------------"A!1AQ"aq2#BRb3rs4CSc(!1"A2Qaq3 ?fY,IDZYd5F4Lu\zW @Ǭ0IT,J|ى=b @1hYlM\TXğ{>bϴIYUhQڢɦvГǿ:Qd@?juu!L'< =oYx!yMNJ-]PR1".8 ffaf:kfc0J(uϔkIۄ;R/R=I@29NA-;K x;6,z$p}'[,iVPT3xS`}} ~U;%&_a6?-(2_-[3l,zfdMlӪi1F bCeLbbµ`ǘ+b8SٔqJ=c0: yye Oa8N%锃0aEacBu6$Dmn ƖRDӦ,bV_TCPySGE 稭:*i1,{Lq)IBcd:Mє!e^ "lH0GfbZ$ Ai68-U5n ~^#f~izl2doH)IYԤjSh%M APOYAUi.chi#QxPRRK{dtYzKNDX,3ܞpZWZ6cbH`؉p(R<82QJ nR/oN*淪+<{* nbPX1&dӈ9>DŽV\-jp fDV1Hm{FX}IMMڑíCTZaZu@7+I'za$ZgY!8!p o'fjtTf$p pW4YhnE$9\:|^V!Liǡ'.J*=;jh*Τ310>p2+Wx G+&H u o!bbvzL AYq<ixJjg_"V$1#{OAxɖH 1Gx7D5iQ@s:@rj9>wP? #CFѾ-Wjۤ=-M#" jS!YEG~늧mC/晤,jS'q%h:T 0Y|>o^㱋"s]= }M(3R Gq^)P! tVڕq;:G^;`rxŕ%h%J ԠQh V9Z(-Rp_V1K㼩_!?-Мyi 9Q҅1z" R"I^99wc zFuI8QDByMTpvxn@{`m'RAh$' ʕ%O8Ƃ:(`=T3[n=AIݓ J{۹e&G(U*JAFb@UڦzOfuVT'nBSk2ң|bpMC/Z̈́⊱rAs*,x>Au"P@Ø$3?l7τHƞ\B$#idӅSl8-hI{t|r96#" 1;Pm*4 m&`Ga̙]EA\ lE4Y`_mT#rʝC :ZƱ;V$I".0|xEZj*6@&6wqz@}/o7G>` *0=b0 d[ɾA'Wx ؇MJ"H% !|,V ]@SZ0$w%m+ z)3ƑlZn/-?WTUS"ǿx`K͓wB/>L(E\TZAm2D}j;:MwąDz|BLgtv |?K3MV[GA 9/ΟHT֋MAso őFI;٨iR ybG}uD̫/XmoKDawmٵCnd%ZH"f#pr  y\ ʼG\YHEr|LUyX1~4hm8pClf|eß<**תN;PuD$P?l[nV2iT^ 9:)2JG>X<,-XivYcw}g_iZDN:9J,L1*_7Nm q@w^ĞqN@eeO=pYVƧ'r:^-%'{ "l[LT*L&,6؁1{ Kt8, $3<>jn?֢4Ĺ$ {b⃓P0bd'AGU% Wg,%qȶ5|;XmcR4#`Y )' q4+E[xP1q䒣6--IxU|%RˠD@SߒM؞89Ԃm"IA' fcm}9-چo{oQZa.n~h Z;:8ͭR( bMţ> YLTubT6$N;uTA$łpMqhƢ˥+L6툹|a~F)O>bI2 L}]DiaL3Ĺ5#Dwk0 (P[D&o#5 X&mE4S d1|J x nCڰ1mXZ@lhdqk"L*еNltFin2\~~Yf̂ E$$عiȸ8FLQtuiu_{'"3WUVH&985K^b{^c?e)0H$/!0O@H7efE48$=:>PI;{moHef;7=z zEM1֓ZsSVHy Lq"}w7qo~jw*k:}r)12eDt89)#+kZUg*R` 9F7Of4e+r ^;7'TYBzǾxaSP 88X[+]WQ5>o >jҨhSVMYlR۟RO8?'4x 3Y  Ů3 E刞Oi35-D,݉hXm6QR7]鋲G7[|:TQT+T $*ma[Y鴰;a}5,eIOLqiP%+l9ɑ&60M|`Atd>z%K~cS[;KFkt͍C8APKH2'9f3'FlOgmG2CrKsȃЛ z`SY3"~Ucf0x*#j cL䍀?L,Aݰ[39$>UΝE [bwnoS1XX< `-HBY-px@Z)IL7<[/߉~ r D8x?q~4 moL1h4z1nϢUQj['b*:(XqAs|7ʨpIC@ydժA`=z{E\Ӥk316n}=UPu6"y3y9%_8%'MYKy2 1avIE!Ѹ鉙 ATDX$m"ב`RKbmw^#xWvfamxO D?)H? aU*rL 㞸IZa I,,6- )vFzU*ժP@4 >b}XP3brml7 ŧV L<Uf].ɺu-E;yvE9|-F1Xmí\Hbŧ FUi[2= >SW4K͝H"a@<0#P;U !THLO8R%g'$n ?K⭇Ctҍ*jToU9\ pӎW3\pUĂ/q`xnꨊ&t`,8# ]p&lx}FY9-1BU! !J- bc\ sT+2>eL(Zw$6bIB~SX Ǵ{wA&ls3EB1y4MA aiŹ!Z}^zl3U {mOg 0oJ?FXc!OTTTy8Fnښ:u"bN0Ec/q 70V9`Tn#yZɴns=`3RYM[u4ꚛ6{!LI^DZ$h8{0MID&Z>>Tc ttfI0g4PPJTf_u$r{ϲ? nsn&d\PѪLnl8" xZN%[G^"&81ԨBRzff&q)PRڳXOo0[+JSbk Dv|O(˲x*@Y:U64TyyykWJ"Q?Kb֞*D@w(7"aal(Bce0o9q+!e"= wCy5ZFP=r}V~z拽~R}6=qό4VR`^O*B"#zuLoY6:܎lo?9Tדg`Xv(yǾ4֯IdyO,I6_a v)ia{c1lfTI&D Ќb9#D'_VVޡ鐼.@H$ b=ƾGHIk, ˊK$ q$cUн3"s|K[/!4CO2-tV4mvrf-WYG]%ObA= `aX Xx0@)K4%X+źeE*L(` 2 ,ahc qӢE:=;2ͯo^paJTZ}O^#2ʔ4`xh$sQT1vZA zF*^?-6R,mXBrSޙbmZy8k>bbSԋEq_`}㏈|" @y-[*rՙI2xbD=#Eϕ!.9=0!/ZF{Kâj]!@f{|Rl|0h( ;"0ky"閾Sm%Pܘ8]GPJRcm{#J` 3$?y-IeXo}..\&ĺ5mQ = s m1Nz#E7TWrJߦ4CF\Hhe? ^ ,.RzAD"H1~73ahF5 :c1PܩSV cc,;qcueL, V9e( +tqMgjʰ!nOQnm1*?\h l' t'Gqp×Eϼ~b{ub~Xʨ&Vh1Q>>qܾcx ၫGiR"cY.͹̞ySE&糋NIr="ߦ2MHަa=4׵Yi/{e|V84˒2tX/Pyp* ,"qaR؛m@AĪt;Lfk1m!L@ZPw(o #qX=0!jN㝳FuBV 1ntYOfEHj+ѩL#3$<j12P1&#s&dJ*֙q_=PIGa3:I5zQ9top=])DCtR$k f"@lBW!a$GB.u2k #){.I$`>CUXšho|I7贃y0~8s .U \0qDk8ri6j^Ib@Y,vtQs끞 j(;:[3ቿ#@T=qT+nz`^ 0#1jʵ7|4{;A Y{ argPxJOemhĽ6P! [Q8#[Ezr29<9wń5Y$8=0u@##YhxU ˛ V<:QOB_9Ә$A=GI\pAƸ9z7ʡf2-oOAɫ]vô>%Jt-6FgHj(VHLwhc*Ud,{qL z2l t;D܄]qxtӴ Hv`et)z ^+2@hL9͜ɭO3ͲHizL^+x6$_~mӦB酟 VHf){3 `uՎRm U{C ؋]SL=#2vh{\bԉR FCQw'L{u<[WSm[+FF($P07I@8Ňh2KK7C-p)fLzO탚5ӧiz+n116pܶgQud"?OcR"&G\Mr$_LsAYl83^ m'@ōivO| z)ۼTk()PzleR[3!Ij,xx;(X@>1֍8X`P 6,Idkg3קL0ghN>`^90GNE4$#I1q)aJ)boOOfSO -* X-MÍR,&8MB#5ɥ ',*օS1Ye1"l4®*fM:m728 ;vOۜ;h r;DHl,` \'=9',#q`"fǰ/R`SwnXSlCuǯL ܆ j=Ab>m|L\14O_O24A ߩaQEP0$G[c8Yj.$:Dr$2ٳL3y +G#L S"}1lAI<8=o`y|ZrV H Y bTez$r=G"H@Ia&΃3e?*rS@,l=L1zc0c M66?5D@c;N*Qe3hpeڍe]^b G[6G^'sEI[Bo6>ù.uXHOV]]`_,rb#S3jge$70û Y\PZEV7 (yu<8%U3{)0@ NVf> ZӹV$qԌOx!;3oNqjIyyi&"ԓ>̫Q&iU g\FJaDc3*y "3p:w3Vv<Z`(3~zZm\j*&f?vz3/J@ulȞm0 E_.s\b3t< =$V;ʅ[aD1SmO#\*"ePA#H;b~˪,wL\`"ݎtW'l,H"2ϣ`B_[x3O$w?n1] k6`.yF[m8\v\^v2OBɨzZEXu&tX_"y'1`.l*KLy9QDjFYOcOK+PT /9˔VI,8GܿT:7 w\v_w˸tq \ذ7-Y2I)`"dϽ =m&/>n*al&Ho| 64 իoe ic'Xֶ^7*n`~ f$Hs^iIdDx.+PicjNiKtc(mES׷ y[?<0kMaMV3rfEu3qL$4Y);.oy{6iS?0 {ϴ`vH TH2HQjF m#a+D5`[Դk&|Tn?Ďz.X wi/OE}kLYRtC%~b)P-SMɵ\؃׏8|I Qn`}xVj"7nOǦczb] HFL̢` FF4N;` rJFiz($Z\q3ǘelbuLJ"YJ{Ǐ"-Nq' $07D3|tcf`X~T|~:,f3}A r-2㯉 B?c|F/WY?0˰Lk qa#61GM0O+3~~+ƞ?F345MQ0;c>GeE(g*cɕ/N-C sӮ+ӓ~f>?r6 P1slf3&c1c9