Ŋij̈`f7DH2T>Zt~6c'|'(LH:i%3%F[F۴14Ǆl.58}h^u41AUMUK>q=
sk;s҇wR8>v:l4S<&S] @Ե"*7ٗmY	5hkڳ#,&urOc>#B
+L29ݯiݚdgؚg	rorC:a[Лa  LA!Ԯ-i)J5TOrEΛZgn#8s	sQM0MWOV>SEk8m3/&۲凓5A<We\{XNeg)(ysrʅszZE,3~J-yknt;&.$DNN7٨IRIb]'<]])A :u1ğ#! o{wECbZMG/!rcaaWcЊ1]<hPOO&$棄Ϗ$1w1x*dxby;3a<ff%])6 $w9ė)qAH7dpܜ<qo@_"<p%h!&]$G3LoI҄cWv\K?_&9T<| q5(Q뙉:-e6<~]ndTl{5+vM,19
83SC
@GI7"ƣ8vhE_Y/K<
=!LR;+$9Y.21$hE_Y/Ktι/p9y!t68$sQ-7F1Ϟx58֟"0q@0 wDߓFCpsJ D4CA@hhw./-Հ!/jӢ(>D,֊۟BYpVks(e-J1@Ò	~p
3&ҭ	n`o>O8c
@..54Vum8oUV_A W>gMȦU4_ؙ	xo%gC!VqJAGYv3p>U_젩-.E(l^GhM$^,yd y/iZJx֯qLP*ʡ>K:]E!lSSncuL݂ 橑gn#8s	sQwxF$9i>

^Ңxj;Ly#	R`iJ}ϧ)mg3"OO&$棄Ϗ$1Yl7mIZE\!9׍8Qul/aHFy EƱSN e~deskb6uh4@2?МqZjTlL[:UQ=(59p/ޠsȈE݌r.YpJtK(j/.<jyraζ.$p_$SEPЫl#{	9<W/Ռ`%7xx@ڔA#Ŏ{ǡ^ P6̢DeUA랒Y6 6)-kQpN	fQܝ6&~ `x	abՏcu &IUι儮YL0}~+H+:-MȘ[3#Jf><[+r5yE!׿?sPzE2KQB;篧5))&L5۽Rjn)Զm߭Hax~OФdc&T】&/,҃:R8/`wxL?hFҺܐR6ǹw7zB=(,&9J5FMpРi7c=2s$d6%_4^1.;o(=}'t9Kl).Ѷ)DI5	eY{h.!?]Md_VH,
iq3Iek8*gTr]2₅؝Du1;'sҚϸ-P\o8ɓ^$M˱y+"]- jaX<XKjJF	䭴ȎV<j4A[M̻|CCD'Tgi?o#k.V '6`-HROе?͞XSxba[EXU7Tmgpö3xr	XLb%yk\"*Fr5Pm>*^ܚԮvڐR*C-h?cQMB3Læ|lR&Uhab:%3.泟YY,&9J5FM<XMϙayα_wb#GBh!iKN_םEJ[;#ZPGzFM.jHAQWKjfVV&h\"=Y"#	/ 	R@h.IA_g__̓3uolG%BrG*.CԚ	Q,#V)4SxN(I43D܎=Υ6Y(
2V4Jx{z7?1b0y1<ъ%SAr-%}>L(H-O9uז=mGЮJCnי+9S*A`[O{cm{:p1)mjlDX`Lc~d)I=FkZ4,>}E;`⾓y} zy>J*BZzV4Jx{z7?1b0yjeK~itp1佒=Laq=1sRRDњ1oI2XE$RȬwI]ړuNDvYf9TypBd`ZҁvjjlxLķHH0`Se{7mp-=hݺΘˮ5z/_HǭE9K$b ynmɘOi)|b)F.8kA*K&۞A!|'>~w -K%]io	}ʖnT&A`,7
v<?v5~2@m]GM>1\4Lj[88Kh	@\vS3Nᾣ1#ɎzXj exZ@RL!gMjP.8kA*K&]ɭ:> Dj.[M.HeJp3Nᾣ1#Ɏz"_YG8#U%CaI,<ڌs{}N.M	,][^ll8^'SHz+W-+OiTe+SLeڔ(3Nᾣ1#ɎzY#O^/طA͸pyGQmOښ?j]5NdTp3Nᾣ1#Ɏzډh42 :UeTŦو]yާ
%ܸC;r׍L`{e0|sG474='jg{cPަܕ%;XBU#MWot Db/'7mcyOTdpx%|l+eNJڧƸa_Df	3"sN[uL oо}x3Nᾣ1#Ɏz,ُfH\,MپrJh'EVԞ]	X,Le7*_B9k]I2\B},^kcxee)
                && ($token->flags & Token::FLAG_KEYWORD_RESERVED)
                && !($token->flags & Token::FLAG_KEYWORD_FUNCTION)
            ) {
                if ($token->value === 'BETWEEN') {
                    $betweenBefore = true;
                }
                if (($brackets === 0) && (empty(static::$ALLOWED_KEYWORDS[$token->value]))) {
                    break;
                }
            }

            if ($token->type === Token::TYPE_OPERATOR) {
                if ($token->value === '(') {
                    ++$brackets;
                } elseif ($token->value === ')') {
                    if ($brackets == 0) {
                        break;
                    }
                    --$brackets;
                }
            }

            $expr->expr .= $token->token;
            if (($token->type === Token::TYPE_NONE)
                || (($token->type === Token::TYPE_KEYWORD)
                && (!($token->flags & Token::FLAG_KEYWORD_RESERVED)))
                || ($token->type === Token::TYPE_STRING)
                || ($token->type === Token::TYPE_SYMBOL)
            ) {
                if (!in_array($token->value, $expr->identifiers)) {
                    $expr->identifiers[] = $token->value;
                }
            }
        }

        // Last iteration was not processed.
        $expr->expr = trim($expr->expr);
        if (!empty($expr->expr)) {
            $ret[] = $expr;
        }

        --$list->idx;

        return $ret;
    }

    /**
     * @param Condition[] $component the component to be built
     * @param array       $options   parameters for building
     *
     * @return string
     */
    public static function build($component, array $options = array())
    {
        if (is_array($component)) {
            return implode(' ', $component);
        } else {
            return $component->expr;
        }
    }
}
