namespace = 'wp/v2'; $this->rest_base = 'statuses'; } /** * Registers the routes for post statuses. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'status' => array( 'description' => __( 'An alphanumeric identifier for the status.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read post statuses. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage post statuses.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all post statuses, depending on user context. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { $data = array(); $statuses = get_post_stati( array( 'internal' => false ), 'object' ); $statuses['trash'] = get_post_status_object( 'trash' ); foreach ( $statuses as $obj ) { $ret = $this->check_read_permission( $obj ); if ( ! $ret ) { continue; } $status = $this->prepare_item_for_response( $obj, $request ); $data[ $obj->name ] = $this->prepare_response_for_collection( $status ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to read a post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $status = get_post_status_object( $request['status'] ); if ( empty( $status ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $check = $this->check_read_permission( $status ); if ( ! $check ) { return new WP_Error( 'rest_cannot_read_status', __( 'Cannot view status.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Checks whether a given post status should be visible. * * @since 4.7.0 * * @param object $status Post status. * @return bool True if the post status is visible, otherwise false. */ protected function check_read_permission( $status ) { if ( true === $status->public ) { return true; } if ( false === $status->internal || 'trash' === $status->name ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } } return false; } /** * Retrieves a specific post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $obj = get_post_status_object( $request['status'] ); if ( empty( $obj ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $data = $this->prepare_item_for_response( $obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a post status object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$status` to `$item` to match parent class for PHP 8 named parameter support. * * @param stdClass $item Post status data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Post status data. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $status = $item; $fields = $this->get_fields_for_response( $request ); $data = array(); if ( in_array( 'name', $fields, true ) ) { $data['name'] = $status->label; } if ( in_array( 'private', $fields, true ) ) { $data['private'] = (bool) $status->private; } if ( in_array( 'protected', $fields, true ) ) { $data['protected'] = (bool) $status->protected; } if ( in_array( 'public', $fields, true ) ) { $data['public'] = (bool) $status->public; } if ( in_array( 'queryable', $fields, true ) ) { $data['queryable'] = (bool) $status->publicly_queryable; } if ( in_array( 'show_in_list', $fields, true ) ) { $data['show_in_list'] = (bool) $status->show_in_admin_all_list; } if ( in_array( 'slug', $fields, true ) ) { $data['slug'] = $status->name; } if ( in_array( 'date_floating', $fields, true ) ) { $data['date_floating'] = $status->date_floating; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); $rest_url = rest_url( rest_get_route_for_post_type_items( 'post' ) ); if ( 'publish' === $status->name ) { $response->add_link( 'archives', $rest_url ); } else { $response->add_link( 'archives', add_query_arg( 'status', $status->name, $rest_url ) ); } /** * Filters a post status returned from the REST API. * * Allows modification of the status data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param object $status The original post status object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_status', $response, $status, $request ); } /** * Retrieves the post status' schema, conforming to JSON Schema. * * @since 4.7.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'status', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The title for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'editۖ6 ljUya^RZV֌Xrr1JJL2M2⚚5q^y=12_r"@ɔ=j$@ 7/+c珞?gWw0؋Ϣ#Uϳ_"*>nnY3?,/;8D~|F_-+7~ _`ݿ٘Nďo{QfdHG} E:]v"'t71ų5mYaDbv>4f 5&2/;i~|7v=18ׯ.P|)!.;un;:Zv۬6@ɨ5 6 _,gJzɏWߎgG7 g)fF/uЏFSķչϹzQ#s%S/aU\y޸\o4}E]ʏ:4Cmpah"l*%/5N.$9l5mzvycŸ&C@!) vX A#K/rL@~o_+v`tz µ_RH7ҥWk\=7uێ.CO wqEƴoHƕDQ"L &(E>+k^{'S6O PR֠<˧0$}`50C9 MHEĘ!riFlA΍EhdύQ\d!U dauVEuéytOg`gTs/Ms·sO>nD'oV`̒O=bn5taᮁ&Xf,-b= /`0gER !qEp> ħ'3Q/#b$ԟpӳ)نA!QCpAs8PaZh8,U7MIײN2LCHqajf}XRвAwx:Htiw8T֮JȰ&0fDXMiD,* 5$5N)k\;%#`ay/ztAGóIUNxX'X9kp.d uqVvٱa=]0NҀq4!34M Ƨݓn^bWCLpZ0*'@MXm \{{[Q45Nvwa2IR9Ҡ;j3b}Qw8&.YYSP(UUS8B zǴST B8`aU*`R>( -A #:C§[utW4xiR0z_ $Dsr~4(ylί{ `aXȹt "F5bEj٨I8J O=' `s&c)Ȱ7 IaÂ49z`h',ޏA[*ξ}Iu, P5ѩ4&: :jI5ҥ}M\)PluQSTRcVqD3kiBzUJeFHY F&(5>TR5^OSCs Om{+sP6\{f}jk}̚ȅVtq;`vNۡtaԵy]Yڹ)uUꦊl!Sf[{jx"Nuhw?T[W;mAnm)EP76dKTe<b*twj24:ݽQiJw%AOw {aǨ [; du; 4nwxc# CˢhCB)R:*;ю-IY\x_j.s=F6pqo\;w=7;g=ra"_Z$ ^_ѻYO9) 4SXC z >wFt_?*;"vnq{_#\ !t*7ڭiQgrOԌs{$$ 9$ӹH~*N6c`p{/>s(?/gݧ]r6+葫}=Q&4&!"\W0%i ߳7 1ɏdyosڑ  At}1Nwiowl`y C}A QIBw):%OӋ#nK;!ki[|156 ̵N ~5V%_&66.RqRS{ܬ6cAOt)8a %gLk('G"$b#o_z(;mgqK,lQ"hi=;_!9.\Wda3t٘Vu|mJ-6x`xɛLnű> z% hiպ(&"'% ?@'IXNR W}ӹ<89"!05)Ro;&n3|,TvA 1ҌEBbV2rC5xȒɄO \!7%\2@5/  P_#kM𯩑 Xaͅae )SFb)c!ex)1j灞O4LĆ [Ί8:$S,@ Msh9i®mYLـiI1gPhfufO;;E*ۇ e/Ph}϶ΌnDKPhôC(KQ̾CGSgpW􄰜0ۄ%f*(@>F/j>Ɵ&αUfR\&͝RB6OeK_VSޤ^AkamXt BaB%OOYֲZ NwWM!1;'Ʌbѧ߲"SqQHNOBOo=i8-6v9Y4UxX UZP]%ȴ*-JK8.,&/&E,srR jC(Bi6]NN;DmHNR,O`r#zCLE vBQ>1+o̎2!|r$oy0SeTRL@IkןIGI 9e *ʪ2BV$+| 7L*&ӞhmMi-*PT8-,HgA(RGť@)W{ &$n?v 2|Sjkl /#P#r.󉠺E'S8F+=gggLꃅB AҦ:NmCLBd ;mA7x ''՛ئɽP’I25+_2 Gq{4z>1/P.+H[N%+aXV?Yώ?QXОMe~k,3+%6ofhU$pY6n@߳PkjPz?S8/ٻ;63{|ݜ.yycԤiȝ{+Yd? YMS{iBS٤2HChBl#b^L.Æ.Z1W$K)D֤s!o,84g(axuHjˑحՄ2EFn O^VEB $2,0nvׂk2/hK8m{g(Aλ5@nVoÈ6l~e”%"c&L/m=z]qrdRcMgNw#m\}UUDgX(QV`,`BwlBSPznY[*F 8|hkc+ ꈻzڱ-cJNj4_ؘ90 `8 o:g,/]ŏ1OY]o\t6 *JS) FOqxxN^.#27t!'fCj&#*uU;;{+ ^.)˲[ WZ穆4~FlF9y\X:,-#v6>1jFY"XڜD|8b[iVn u0v6k;NLal;!N9L BSOhrSEi# Uî%4h ^>pBHY(%,.%o@S豏OQI>LnOb-^̔g) `.A qR&1xN4 E71;UON"5<`YS{+H1M3 e gIWX+tь#&ki[B?DS1Ni./JTGX؝%jd/ h$eSaw%)f׼q!'7ht6ҟAP6B,s+rX8P:c"tF< dm1 AIq9pՒY5ae&Bgpd|(YQGy܎!Z.iFqUh'];N]q-] l zs" -)GE684EE5E$ͬ_n_t>Az_@fg2Ek3K?ẌOC3Es/kHqѢj並^KWo>qKiRH_HWo>qKi#e;՛ODZo.^SDWo>qKiMS]ĉ.qOJ' &YJ]ᇼTU (cT1.ʘeLmi>K=ڤ4^ *mE9+@K۫]K+R?4WKݕX_ HGwp!03e ̻Y`of9HjSqJe!fkvs#ԿOCI|ô oE merԠ "7 ysTH6R\̷ ;u!+^LsRڎ2%ol8ɹ13B~:T?yHo;_k AcL4Ĥ`@[VXQ3[7N<% F1Ga15bJ*6ĄgD9y3xŹte :&Qp)a ڮS/oҵ mm5]x[`>aUI{:sBIػrdžN=nd'?;Y "d&7c5;?rYxL54M !{iKx`eG3 kYsӞg:+d|ȐJ+8@$':U3 ~-ZHW,vWHuGh~ kU]:U >%~Prjԩ]wžel2*?([7jr-e%t7(1vb,Ε+ޠ{.&jFÒdQheCNzЕAX8ʮ)1dM {42&B/,0uAԲ"Qh3 CLz^/8)w) $(m CBI.SP`ņʔ(>l) FSYAO'=P)"3TZ kd4ͤwmE1֚Dst:%eb'._8oiZ9NsVQ {G}ua Rll8ܒS 㢹x.']EӔ|@x60'm·ƮZC1c+CWcw҃^GC&eNIY@Wf`^"*}hqk1PG9İxly+, bkpק׳{uGU.Y ܣ}a&RqeF~}jXGkpt}8eHkt=<_m1YFɓQ  a˹\VTrR!N+~yD(Њ k%`WS :Tg㺈^c>pN5^&4i6):;(Wa٨v][4ӓVʕlPK'7<71|_ZF!P6:E wC+i e m⺃]n7>ǐi1y.W20 ={a?#sR%D,#e1єIe}ǰ= j+cʐ740UT)OyM2/4챒 z~i[ZfR>Z[+wMF-*=}jΨjNLK<u^:}Ut< <JQL 'HyR<"9 oJR##fYU,\,]zuAyvJ8>oI:pR#b HyiNsw]c5zzq!SssxgqWےH%7x8hl di_YW O٣'`[OSyJ͉$}e'J4~]wv' =K;)X,(qgGck7q"k/3UkCm" =TU,Qn!tKJBuH8j jwfW44'黙Xb0M0yh>7g~ˏlUz,xc NJUj?IC3 k6z+/U_ٿh-^fQ^$> lm{4뾦e"hnх}*>_WwY&*\]eFao'"|_}8#>]9xd2Ѿtxyi+"!`Nݎ Z86FxrLM(/ݱMjn{.dd;=9;Kɑ9Z@氧2' &$` # F:k;9mRCRt&?@"@ŋ *wص"Qcxsgɮr1^d1Zt\|a@ EUqB 7v謘 O.16DEo8mcx[{'k1],FE9kRRG֞$8;/6v\FdRI-NyL:"EO|̋kVQ(tГaFdI#U)>ˈyB3S˳M>${9$ɒyBA BW5ڡLaP2l z6Goq~7lѰN ]F'( a=Q;?٫٣BuP%ˣ!HcggUٝ1lcɯ. @ODLbׂZxo ",J3H͛mc;d'(5M)Ėrq5AY""E E 1?OsO` vZ\s; B ]hd2 Bs1Ռ.Qۘ L 6>AVsĨz]Г=q,HU+%gAǷ2jDT-$̺K_MĹQl˙*h#ftKL*.> 0B5̧I}-:`\ R#P.h$&KHMÎ P}2):Qډ{ĉi+ML/I)[rN王6'X4 lu%LCE;QC*1 ȋ^|ȹ] ]*[9_ *vz+|w3z܄NkNv> G A):36`3pz摏|U¤Tcu뼛"bШr{逸vld-4=] PoHGW XmHMt9|m P]-Ğ׬4v"G&IAqš)ըʂ^2|KTWqqP x*SFR&#mvp;x^.ZqT C M34tBG#yUHpNMOQE*UJvvѥT[ ːULǾj:-$HXvB6;Uж"2KhjIn {x7I0ʽ,1{ћRo:}Ce!g"!*~*jZB,+3sY-MV9'vA_7 . Of߻ckHJ7gRg%[3݌Xe!9f ƤW|h4OvFw_%t tCd,-uNy֔w_뺪A6w[jz5gn; ݸvqئeҒV-2D=eK*.Eh`"h sJBȫ@Kg~]T`5sUVo`6ASyO/t\LcTWӍwqiIqԼwZ:=i~WI=OBWiH 4pST)h@p1(cVE5 7Jg_ѕQ5z4jKSw0/lcT*7ɂ5 ?GS5^o&g{W}!zli9dž5N&^ Pѿ!a!VZayt6X+as 3vhZ/>xu.!2)ՀEM)6 f+3i=V{X)NY ~\"CCwpw7wЀ;8̕s#$F[T F(yM+" F흰GWQ5(e 5xB,ł#B εV[?I^lP>~AaF~%{8x3p³}i4Vnyc^Pz^)ғߤ B2Rb͔Qُ͞:7BU+NN)c`&~HPsA]k@1 @Nga2ɤ0[ŏhRึG{i ORZ( Xq!Pֿ؆nM[`͖[@IZ-|yYx1V~Xl711/ VnY`5#~ekv4["|s<], lY2M> ,EQWNJMs/Z@F4k WxNr%glC#.+;O<מ|7fvLR0x @}AŒ5"^\ޙmTcۄ.}Ny J|L=G4^$I fSPb|aFDuu#xr5Š^r')bc8xY"`Ӂ).]Ykta+yg3Qͻ88<[XoU#%vg%amRB Jd/V}V[14+ϊ+zqH]"Lu T` amR 7( DT ؏5n>7NuʌXgjX=Pt eJ?,SUНjth1p)HFI毑(ʟFxd.Cs2h+,X$̲oU񊷺/VkRӫ.;\sA}ރU]J9ֻ2]mA!xqsnܑ3nL;,3ʞLF%_r>Ql-^쬩T^d窱T][q5!j}k@iʀ2^#p2[+/`<`<0"<5qy8wFXܓ¶xeU==*dmIZEM1j]">DF|MzSJ7uzCmU;wՊ&hzzh vdֵ믔U:+\5zv(Xcy& V}{ h@-|w%+ri,;1JC&مAvecW؋!f ;8]q劅4R,e^ſ4JlPuaJcV]UezFU19z!1 dٕ9b]b/E56b môq"]iC݉;}oo[d}ٹVneط]֕^u>u xw͒ DQyd=7CZ{}L^N M~~~}❱4鸟=;i CJ\mIaxwi+T4ZDMqhGZE2{[;Hv;j.~@`є3* kۭl SXNEšDZN;ҮlԜvd=Xg_كeeNTJi\@6v+UR`m-~OfuX#^lVy 4fiwíg )VgۻBj@nu7ueկzMvw0P}s [XsܕЎ6{̾R\~?e+Ys-x.HkKzH6ՒYmn[jB+mnz:(yl_$~CEVap5&k&Sf;Xj,@υ-ڋ~Is'rvX<%F`eNV0u{ 23-3fsQfG,h(Oqm o[nTǢ YVZś%R?&{썧drnbmמ[%ae[AH`}- A0!ucliD4=Q6%ܴlM+6$*N܇]g}tom=LƋu0Iv55&kFKchOulvg]z~W+6B_m*\ Uj_#HGs;:66Y3%$sK,'1 q j݄ {Ό=J2in&$.1mO{HV/pE!}\$|Gذsxpr|E`3ml{&2zWеΊ8mlw<YfD@VUlΎStfH.)msy E}[|+&#+CpA֏ 8~|òcp3HGt.{7+A~+x&$EGΥ'x#6$RRI|,7Ŧd1s}ؾviLGK}o}eM~Pb8/SU1kIbN76c: 5o?b!}}#S6ϓlܴ%ᮯ4JG/EpCG~Y[gYDjT(ISt.۞a," Yk4v]d慄aI,Oӡ<"Cb~#M^%L"Wu/KJG#"^(hVc(>5]T p5WbQj?ro^TJUf *}&ק3 U"% u, f\Tt+TFC5Z@>00v-K(XlI_fw4q × 5Ee3Flbhԡjm8N1MR%h[rM_CjY:v3c{_{fV:%x-c& pqb"!29OZ@.$Ȱx2X^aB }6ur ܚi'>ȖQI:dԆgTEUT"]pr!_3ܽk;tm<^ U&:*ĵ&|.qhŷ垾x ӮF_> e"Ȩ,$u7@>sl!q,ʲ[SӦN?˕,/ 謌d ̠[fܳarVݶ۲U{bTFx &z.;ΔfrUJX+w bM$踷X'+M27U̩0dݟvP1\,Á 14z7aaJFG_6F{ah<孩FQT5ھC}tMJPz 0*Nd݌[X~_%3"t06z ZX ؋Ig5YYH| ~i\nUZ蠔NVSլ %_ r..Riի|-i2PS\tj5@G^{Z%SW[ԙw!VfP+V&QqgdwߐN =m ՕgZb&LqUAa*WBZu˗/ ʮ0c <)@|/ XaLgԴӀ;W[nx5e u//uSvZCIlgex[za^yl*r 06䃴|G o|Ƽ^R8BzuoL!9cw¨w-;C6<'h۞!tK'w='z6-B}TpL}E[V`| + O2ѩS~ઝz 48;&9½V$ Nz"9Wu{h-8&8u VvsLPX6~'SO{o*4&kvk" zOG6-ĬNT>Rvď&fC;? SF'F{Ԁd{d·¸P1p_SHÕLj)ZzI+[`,f"[q>Gj$ԏ0ZUj kusBjZu6.DM3fkEe?KW 4Z͒v@ @5  /W^8C $P^zwO#6~DbZѠ'uWBh;@C ~/d`9b:$b& I=e~ Mr[,Q8(Ɏ][ x'Ԛӟ!)}Qe.x~ʎfxwf|1JF6jAt+[f"7ymc.rz$3uuW) -r=j7Nwd^,#0ȁ*2'QE䢆$ϲڬ4VjޝYP(T`<GbYϳC}\w[CRa6q/?h1+BypUx%vNU}8|ᇙ Lp,@]C Jo5;CT&M0xhv(%޸X}ٖ`grQQ3wD FXb.AQm.4Y{T[Qא&y~PgCxr'-b&«CV6юui*^婱r[m**uEٕ#?2ugڜ &zcY񈻒%EW9 9/]0⺩^O޾١d&T6ݱ2Z+ ``%kޚvnjEl+yElg> vlc,^p$w_ (dQ *󚝝qRgM@E9"t䄄m&RPCɚt[rߖ]uO7o%UzkP#s +- 4,Mj۽=}}u)WPy'h*2uؐ(vwɍs0J@QP8Y,Bk8vb=~c,^(,+uNY mwej%%”tܪ,?hfC0F&Gɞ+ XOa,d[iU4'*WJ#^Y Qrư-sCt[CthE~no8~ P1LH-V$J +nt Lb e/v ZﳙŸDEҾ,1RSk˓92%6{TXop&kv,soŠ1x54+@oުSXje'HE`YM 3ky@l$P.7Я4YOr()[†H[쩾2c(ח7^\u%xr:}F:uAj>G$ ҉̰y~1MOO 4]lg1'{q0:Z`b&tNmH^NUD>M줔澁*3B3'_̝]8՚M] ny&r6* Px;M|QɐYɶ1J#U<^%QT`wM4y /3D"7Åd0VIY-6U” 3A}JGH s݊){uHv*r;]hwrdV<9y8n6}Ҽ[Z%XOznaw]nv[4PfnZ\= aKRZTu~DK=Gێ#=]2y#HఽXtFe)WЖ#8ӋZ 3V_*o !Np]zRUeW4t|X:&Nz+KMVwSȑx9(;ҫ?-aݙW"\Lm]Ʌ8LnlݢmG׀5"_/"GS5hTw 5"7s@i=OOBTa{7]4c^c:>?埤M|V6sRDva*fW9ɳv Jxm~y']ΎGS+|&I&OZENoЧe%$+); W#x'ϸrǐEҺH?LENIr'@;/g-C G&t㋊l)emn a1fl #0췼F85]MP-5m.9@©TJpI/QZSlѓ+0,xE!? s멓0sN"GLJʵ8UֽFBŬ"b2W3(5nja:UmO^ȯ 3UK^ tB77ԉ*4F#p̴t,Jt+4vWR3xVaY).6& *70 RD:SLՠܷršB3 ؛r)lvZƽ(Q!gVD頇I١b ,Žm{3NcEz8RJU^|*\]#<\ʹsR8QǠCKsqk10^or Deѳ>}gl˧;O wqTFEOUHOWq:zl][Wnl{?&qA~Y?%V0rxr2Gg'O ;|J{j| S#vQ[ϻ T"$~1R,> ߱e^r  ]i~7D͆x nHv'{ N)<,&i4u:M~ޜ1&ŐVt)++"#^K6`y\E^F7橁^>EOUSXt3{o_,cDs٩txlIx]1ۨwv :,x5$V2U+BjFP}dRMyx_~݋Q0o^G=WA8˭O]G߻ˣNҹDvhoZ_ 9{yeKIwBoC?>:El1p؋#ţ~_TwJ?+ f6Ѩ/E ߆i7Y&x!pb` ?n.* @. rA]`@5\E\Y]3zKKJ3eO.W`vo$>c(>h<$Kgߣ/FQdl#zd=D/eF<`pʳj9'ҾZxx`A w|,Pƴ̑u;z +.;4EaO@̺?iەN3JPڜDD,uJOFaweuWj]MiT0+"C {" &]N߃}mk7j{Kf Xj5tML$a(ox2.$-qӌء<1 sO϶ rبa~gb6smzl(;Ƽ賤+rǰ~l4M v v64P0X`6A,W73!0yC\5ދc費L+Wo1(ၑ+S9hGG)dӘAk",nl=nmgY9ұ}2.paHL Hl_]̎5)| _K?jgbdcW}ry$Ɲ-gtݙ ]r9+@ԭzkF_B,&5Wm=XQ#'-4*#T S=XUl:0%cV2 U[ܥٕذْY<|N`JO;$_xJQjϓXç_ypE NNt1: P+&XGo?g@ xqv$86&#%1JAIR^qaSFbLL`K#30Dp*kiȋ 3ElZXvj4''sѱcK*t/"}+m$3=\T >^>^zٝxAs~"l&YF. I%jampQT!ܻ,)S.M o\ZOD j޵pIjo,e+`۝x}'vݝvaYj/vڟbY+<Ԯ+$ow.fVI$To(2JKR,>KR,BHHBHo7R)F }cBؒ• N-GА>qJRSz/3*3ʗWLLeUe2'UeNeNʜ˜U9˗*u)U ^V2P JvjaXC G +Yba%S 5\1d/1pư5ް*yUNOT+ oXaixê KV%oXް*yU7Jް4aUQ%o41䍑7F1"ӈ7F1ƨ7FUHJixcT# o*ycq%o51䍱7ƕ1y^3hx-XP^Z KtLk ̺7`ּ/t  []dcl<ƒ+#_t+RP'-=pi )ڹRn@Z#0%w;>guZB S"Ojyf94AߛfZ*z\N`(7j~>ޠkY#F=6 aã Ǭ 4&t_ۑ)X,{j ^5ɼ'.f CXiOEPx) M0E<8ޤEQOӓJ`Ixų2pO)>͆ggb [fأx#&19޵ #fwȌ G̫о3UO&À`4ʨ`%k'j0 AΝ 45,\[)ն(rvBx.U8a18ÿӳn!h+јXЏOrnSp$RU+Wzا {1 ;[swɰxzbOO~;^^~89q4LB#CE+{3l }3: g)!_ ?a؝N[ӓ2v&&0f7Mv܉]^W|LH"U+dKD]1GK?@L4[<o*x5Az~wdF13(.BΗ5N8_T$=Vk+i9opkV-'>klWv lvpC v,S$>o /'+w"#'9ռeP*{qΠ Xzc1kI-زMO0gFox#}eV3oV$$Gyۑ&v+f|ynK|,T,MK-kbw )(xjM*VV x{ ɱ02O/`Uqq\ݱh'V1Lw\\r&<(z9D]OىH[|fϲSS,g g}2>OǣZJI_m +Lz>= |T\[/, f?F(+0 ` $$eM{El?}H.A"U%PvΙ" SfB>!0 ?E{Fh켃o7A"' _<#$tWsCe8 /^>:CǑjV |2y7J l{vͼK) @ɤaSӏK1wTtssӻW,0)bn/LNo+w펏 +)cfcX=FϜzpoP`T ƺo_0r(eR^YzbD)E0ę֓2;pRg˸99[fU)Lv9a0_BF07wRWZ7ǿg}ϥWUsVCBZ%xtłfq-J >@vNꆲI#\:Eo/;J?4nI$7PA lše7)0Bk"Ʒ!-b 2C毖fO6_Yw;o<\Or1Y~ "b0l<(͡VA+Ql?ꈌhf*}UcTvEGs2\qL>UM-c!KM)fcl+&9-ۤ k6HOq/kxg v~*H>9%2S⌺58M|gbt# g0cu>LPI$q.X բcQ8K84IUjHPF K a\ "ݙ6WC@v` C&rHhvogsp }I.^BjՈ%BwJ^D- qjAw +cx;9q5ia֬)L+X;DlJWp}#Z`KvlD[t/S08mtMh9 n?:~X9O ?O2=??{0{[pon Z-z2̑ԗMOn N,j2aNݸH @z*|OMϙPپ161\` _e0y+-o>bojYTa=UO =J]3H l|RmhvV``6O4U# HCcF;ooE jAo >Z~bJDqz9zaAG+ى8#B%uE2)؋-sr{m.WUAx6Yte7vD@m72dl /cOyA.L סi~!a7+ 6 E[@RkhʻAa= l Cm xdqEt1M/||;+m@7mm"Qi;8iK#Jny¥.f$Oۂнry/]n3tt0t,Ɗ E^#Β^Đ4ϷDyҒFDEYKK";]UOD3YN,*axNhQ%P <-wD+q谢%/w;muFe+QyF{i*Yp6U֔ 9w YZíSv8 Ya˯_[|U(ԑ`@\h[^++u*xW~cNK6~N_C"eȾ$sHy|"w&)3t1 P@ ʪGR[L(w;2<;ZYKڢ1T5U9N5`+AiX?]\H l{-fQgC鎳LuLs@EɁ ȤZ_r)DP1By5ڒf?É2^. Pyb s:8`nAS=Ǝ,| CT-mpLP-Zc@#| 䀂}{Y_l |[| U#cRA l*P-q% piM^tO(Ay"'\tO*A ׌/m|l}D)= xe9P&% mo)Ƥwq5I2>S$ޚxk>GHSkzuSP"hN[ua@G *;>=x`p&~ϓwJ`̅kw;A0)XX ԲV$^Vѧǃ!Ŷf8[b{y.c[+o $O mcDA&Z,iQhY4 d vtj!75#Z9z굿ݸ٬YEĮc8|f;$j>P5[VOԞnUAS !ҧ;X޿֢7$?:Z%nYo5@8?ZdXrhqvw݀ń ,Y;ƛU_DQ4Z9 h 0 %O/ϵ\m"~"6 n11߄g>,HrS,Ե>A nxXÊַͯ&ƥ۫Q'c衬D"%X:%WrxWL}hŦVqCKJ9)A!V bJۛ>u|).oND<9xL߇W6g{.P cpj!"Y- IZuF}дbvޮIyM+ۢR@&hR@#Ķm٭$]TQ?>u9f߇ *vWA_]ȕW֘y>^;2oV(3&rSiro篞篶>AD`!uZ{c7`RbD57L/N[fϺ eA.5^[ç>Auoȯ}% mle+ֺ0O+lf})AScQ1}k}n%1I.maSqvL3x3_ڑFmH \ Nb7k{e M2iCY߲pPښZP'7]Gj?Ok._*[<~V0BH [J[(GZj|N~p*`TPOXȷd8&Msp9Pm s"-!q\xONO&e.L_jn,̿g}+vp\^'")A#^wh]%nZT'AO :Xh$\܉s4bR2' 'g< }^$0Iށl"* VTW/ʅ':Xt$xǡ\#AK R$ f1DZN֎sx#5>d\Y 6rݸ.̠4ޅztYm˥֜y/<>juYsQM >>a6?CK7i, ©Ap, EɥtRkCd?/t6~ꁧ зe5ظ;11Cs|-er^VQ\nr=D)>_UCB˥CA.6ɧՓx`1Kze7o+{_lFgH]-Ķx\!FBB1==1=Ts5;+[%t%ƴ%c;+:?A|uSf:g n]qӳY^Nm{bWii-B#&Ng%#egP,*zaE{_mmw!ds`@T K Zj %1-N-Mȅu YPC,c&]ӏ>_ FXǧ^ ~l<Ҍ]ݶz($I\_'OlZwP%s8aR2$YxRL"0- jtZ+ZREvX!|| ­F [/@YV;(ݐplKU@-UynYMft\xkX~;Wx}OJٗ´.Tv1MI=!E[??W)?ؙ{œ/mcPH"xHÊ8_iίf}lY4`MOBHGEy 1D^Y5 EEKbD==ʟydڨ}#Qذ7U]LFuKv w& B{ ,RIxI]X&nnTYKf̍|ݸx}Ukgz?3CnLYs~%013gTśT >9v!(4`ں,cBmgPap~K>zַ[O<&M:o9a%2eg888h?b<W$Rå{KX$x I` 8όf/X4 z*\-"H$iXj8`Vh97y߽5$%5ۜ3ιHL$%(h2Śy2Mi/!gG‹ɯ7keKB5qz2C<_Z[/`Rfm~ٸC=[YϙIw%@Dq*?^=ݻW__?|W ޾۷Ʒ/{ͫoAwk;H~k/7^NV7@,MZ8]ّ1'L`vc>Y|E6 PCFdbXPk\@>B.6<Dl~0DtcsЍ ,b8qnR7ޟGql&o_sUE*b T+ Pk99{mZÓLFm f<_BF0OPp呥Ig^s<뛿bRHKidS|Lt!!AU,kf_@6"1Š{ o CK3Cɳ+e %Ne1еM;_Vjyl7߼{գ5&do^C$=іS:YYreǴ[4$68P0F<>03Om<\Yv>dѹ_xlf9Ȋop ۤ? \1A)HJ^'E16R.G6w!.hAZ2Vc2 ,rBw(6hCG|Y뾳YuD6tH缳-&n5w`B@c eye{h@r~۬6 ۋCft{m`xr`9IʽvYޗ?ǣ;??Eu!O Btm>vn6){ K`&,B:o$$ƾx [v {ol7$,c;$ ..`t1 3l2ΧԚ/v'ݰ S^Шf!i<ݏ/zŏƗG@_kΘ3U, ɑu.hi\A7 w^&(B aP8;qK.aA؛TmTqު`D<)lA;G-#Iay%!mI.C5ZL2^&`F?` [_DiYhXj(t0Rr& eBxqbր ȇ$M vGgj O:`h%C .x?6w__E8s==P1Y'qIdȐfڥ-^$,}{ހB>olF8fߘ`|K##* gF̄2tb&Ҟ Ʊ3>K jnt `6ss朷If[3TRE塛lF'!u@-2=hweŢ.Q`Sg : LZIpZ] Y:AFHhGU.x*p*6f%(Eˌ~rC1uC=N+`3'r!@m5p|6Wث[]G[ i*ʵB9ZBAD avZM 0 BOtI|3X[W<?89e:&TG@9>pn'cp V ㇇uQ{+hRQY9^k{wo%!0Z}k(c~gcd XA$7 )*tP?f%vﳹ,gTr JE> mF΍W _%@v{hx4)4H Рtc-E>7GlL|2>*