From ddf94e9881ae211dcbab9d6e1ba1ac3d7b8919c4 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Sun, 26 Jan 2020 16:15:30 +0100 Subject: [PATCH] Release: 62acd0029b6217cb4a2151caafb560a7 --- __init__.py | 215 + _docs_/_downloads/unittest.pdf | Bin 0 -> 268248 bytes _docs_/_sources/index.rst.txt | 23 + _docs_/_static/ajax-loader.gif | Bin 0 -> 673 bytes _docs_/_static/alabaster.css | 607 + _docs_/_static/basic.css | 648 ++ _docs_/_static/comment-bright.png | Bin 0 -> 756 bytes _docs_/_static/comment-close.png | Bin 0 -> 829 bytes _docs_/_static/comment.png | Bin 0 -> 641 bytes _docs_/_static/custom.css | 1 + _docs_/_static/doctools.js | 311 + _docs_/_static/down-pressed.png | Bin 0 -> 222 bytes _docs_/_static/down.png | Bin 0 -> 202 bytes _docs_/_static/file.png | Bin 0 -> 286 bytes _docs_/_static/jquery.js | 10253 +++++++++++++++++ _docs_/_static/minus.png | Bin 0 -> 90 bytes _docs_/_static/plus.png | Bin 0 -> 90 bytes _docs_/_static/pygments.css | 69 + _docs_/_static/searchtools.js | 761 ++ _docs_/_static/underscore.js | 1548 +++ _docs_/_static/up-pressed.png | Bin 0 -> 214 bytes _docs_/_static/up.png | Bin 0 -> 203 bytes _docs_/_static/websupport.js | 808 ++ _docs_/genindex.html | 161 + _docs_/index.html | 366 + _docs_/objects.inv | Bin 0 -> 383 bytes _docs_/py-modindex.html | 104 + _docs_/search.html | 100 + _docs_/searchindex.js | 1 + _testresults_/unittest.json | 17279 ++++++++++++++++++++++++++++ _testresults_/unittest.pdf | Bin 0 -> 290299 bytes 31 files changed, 33255 insertions(+) create mode 100644 __init__.py create mode 100644 _docs_/_downloads/unittest.pdf create mode 100644 _docs_/_sources/index.rst.txt create mode 100644 _docs_/_static/ajax-loader.gif create mode 100644 _docs_/_static/alabaster.css create mode 100644 _docs_/_static/basic.css create mode 100644 _docs_/_static/comment-bright.png create mode 100644 _docs_/_static/comment-close.png create mode 100644 _docs_/_static/comment.png create mode 100644 _docs_/_static/custom.css create mode 100644 _docs_/_static/doctools.js create mode 100644 _docs_/_static/down-pressed.png create mode 100644 _docs_/_static/down.png create mode 100644 _docs_/_static/file.png create mode 100644 _docs_/_static/jquery.js create mode 100644 _docs_/_static/minus.png create mode 100644 _docs_/_static/plus.png create mode 100644 _docs_/_static/pygments.css create mode 100644 _docs_/_static/searchtools.js create mode 100644 _docs_/_static/underscore.js create mode 100644 _docs_/_static/up-pressed.png create mode 100644 _docs_/_static/up.png create mode 100644 _docs_/_static/websupport.js create mode 100644 _docs_/genindex.html create mode 100644 _docs_/index.html create mode 100644 _docs_/objects.inv create mode 100644 _docs_/py-modindex.html create mode 100644 _docs_/search.html create mode 100644 _docs_/searchindex.js create mode 100644 _testresults_/unittest.json create mode 100644 _testresults_/unittest.pdf diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..fd642e5 --- /dev/null +++ b/__init__.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +""" +state_machine (State Machine) +============================= + +**Author:** + +* Dirk Alders + +**Description:** + + This Module helps implementing state machines. + +**Submodules:** + +* :class:`state_machine.state_machine` + +**Unittest:** + + See also the :download:`unittest ` documentation. + +**Module Documentation:** + +""" +__DEPENDENCIES__ = [] + +import logging +import time + + +logger_name = 'STATE_MACHINE' +logger = logging.getLogger(logger_name) + + +__INTERPRETER__ = (2, 3) +"""The supported Interpreter-Versions""" +__DESCRIPTION__ = """This Module helps implementing state machines.""" +"""The Module description""" + + +class state_machine(object): + """ + :param default_state: The default state which is set on initialisation. + :param log_lvl: The log level, this Module logs to (see Loging-Levels of Module :mod:`logging`) + + .. note:: Additional keyword parameters well be stored as varibles of the instance (e.g. to give variables or methods for transition condition calculation). + + A state machine class can be created by deriving it from this class. The transitions are defined by overriding the variable `TRANSITIONS`. + This Variable is a dictionary, where the key is the start-state and the content is a tuple or list of transitions. Each transition is a tuple or list + including the following information: (condition-method (str), transition-time (number), target_state (str)). + + .. note:: The condition-method needs to be implemented as part of the new class. + + .. note:: It is usefull to define the states as variables of this class. + + + **Example:** + + .. literalinclude:: ../examples/example.py + + .. literalinclude:: ../examples/example.log + """ + TRANSITIONS = {} + LOG_PREFIX = 'StateMachine:' + + def __init__(self, default_state, log_lvl, **kwargs): + self.__state__ = None + self.__last_transition_condition__ = None + self.__conditions_start_time__ = {} + self.__state_change_callbacks__ = {} + self.__log_lvl__ = log_lvl + self.__set_state__(default_state, '__init__') + for key in kwargs: + setattr(self, key, kwargs.get(key)) + + def register_state_change_callback(self, state, condition, callback, *args, **kwargs): + """ + :param state: The target state. The callback will be executed, if the state machine changes to this state. None means all states. + :type state: str + :param condition: The transition condition. The callback will be executed, if this condition is responsible for the state change. None means all conditions. + :type condition: str + :param callback: The callback to be executed. + + .. note:: Additional arguments and keyword parameters are supported. These arguments and parameters will be used as arguments and parameters for the callback execution. + + This methods allows to register callbacks which will be executed on state changes. + """ + if state not in self.__state_change_callbacks__: + self.__state_change_callbacks__[state] = {} + if condition not in self.__state_change_callbacks__[state]: + self.__state_change_callbacks__[state][condition] = [] + self.__state_change_callbacks__[state][condition].append((callback, args, kwargs)) + + def this_state(self): + """ + :return: The current state. + + This method returns the current state of the state machine. + """ + return self.__state__ + + def this_state_is(self, state): + """ + :param state: The state to be checked + :type state: str + :return: True if the given state is currently active, else False. + :rtype: bool + + This methods returns the boolean information if the state machine is currently in the given state. + """ + return self.__state__ == state + + def this_state_duration(self): + """ + :return: The time how long the current state is active. + :rtype: float + + This method returns the time how long the current state is active. + """ + return time.time() - self.__time_stamp_state_change__ + + def last_transition_condition(self): + """ + :return: The last transition condition. + :rtype: str + + This method returns the last transition condition. + """ + return self.__last_transition_condition__ + + def last_transition_condition_was(self, condition): + """ + :param condition: The condition to be checked + :type condition: str + :return: True if the given condition was the last transition condition, else False. + :rtype: bool + + This methods returns the boolean information if the last transition condition is equivalent to the given condition. + """ + return self.__last_transition_condition__ == condition + + def previous_state(self): + """ + :return: The previous state. + :rtype: str + + This method returns the previous state of the state machine. + """ + return self.__prev_state__ + + def previous_state_was(self, state): + """ + :param state: The state to be checked + :type state: str + :return: True if the given state was previously active, else False. + :rtype: bool + + This methods returns the boolean information if the state machine was previously in the given state. + """ + return self.__prev_state__ == state + + def previous_state_duration(self): + """ + :return: The time how long the previous state was active. + :rtype: float + + This method returns the time how long the previous state was active. + """ + return self.__prev_state_dt__ + + def __set_state__(self, target_state, condition): + logger.log(self.__log_lvl__, "%s State change (%s): %s -> %s", self.LOG_PREFIX, repr(condition), repr(self.__state__), repr(target_state)) + timestamp = time.time() + self.__prev_state__ = self.__state__ + if self.__prev_state__ is None: + self.__prev_state_dt__ = 0. + else: + self.__prev_state_dt__ = timestamp - self.__time_stamp_state_change__ + self.__state__ = target_state + self.__last_transition_condition__ = condition + self.__time_stamp_state_change__ = timestamp + self.__conditions_start_time__ = {} + for callback, args, kwargs in self.__state_change_callbacks__.get(None, {}).get(None, []): + callback(*args, **kwargs) + for callback, args, kwargs in self.__state_change_callbacks__.get(target_state, {}).get(None, []): + callback(*args, **kwargs) + for callback, args, kwargs in self.__state_change_callbacks__.get(None, {}).get(condition, []): + callback(*args, **kwargs) + for callback, args, kwargs in self.__state_change_callbacks__.get(target_state, {}).get(condition, []): + callback(*args, **kwargs) + + def work(self): + """ + This Method needs to be executed cyclicly to enable the state machine. + """ + tm = time.time() + transitions = self.TRANSITIONS.get(self.this_state()) + if transitions is not None: + active_transitions = [] + cnt = 0 + for method_name, transition_delay, target_state in transitions: + method = getattr(self, method_name) + if method(): + if method_name not in self.__conditions_start_time__: + self.__conditions_start_time__[method_name] = tm + if tm - self.__conditions_start_time__[method_name] >= transition_delay: + active_transitions.append((transition_delay - tm + self.__conditions_start_time__[method_name], cnt, target_state, method_name)) + else: + self.__conditions_start_time__[method_name] = tm + cnt += 1 + if len(active_transitions) > 0: + active_transitions.sort() + self.__set_state__(active_transitions[0][2], active_transitions[0][3]) diff --git a/_docs_/_downloads/unittest.pdf b/_docs_/_downloads/unittest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b5d2577a8314817f1cba5465afce32ea1d1b9dea GIT binary patch literal 268248 zcma&NbC4*{)+O4uZQHhOTc>Ti`?PJJwr$(CZQC~H+&6dTee=Fwytx%wQ9H9L>W_@b zwbxp?lT<-OjFyp(6^e9racC8aiGYE?&d?HyhX;yY#lzl&fL`9vQrX!Cie8R@k%0k< zUd+PL$(ewI@oy+&Vr%AX{&$#}k>LNi{`J<{*~F26Ud-CS*+j&|$j;aVijNP<$=T7w zzy`{Fy-Ib$_CO4w^Md-_9AEADvD1GDC;*lwfJ6X+yQRy%C|;&g##7P~_s6@uER=L3 zoJIc&eTx!(!F=pLzo5x zk-QMMT9gSBx~ML`5v+#LW|T_j!5B7K0F6DGDCMq~fm7e%8V60Bt~Ts0w*}J!I*tq< zR9X;@7c`VqAuK&Jf7HM)5F)Mt1sF|Y%6>_-()}o284bmQq$n4!{EraDP2D&r(h&`@ zHEM=60B8gvt41XRQZG4YfR+U#lowXB2&1F{XwDo5c+QiZP&ySBeLx*#y#qyZGHiK* zWX!H%k-q>hh9W7nAzEGu42Wv?Ut$9n6b9d|^K@+iQseA=^C^ z)mnreH7;O~P}XWhVBCaU5ce52v?+x?dA|bva{>-kh@K%M0QMa|s}a3zt~pMlbuUgO z3vsG&61RQ~5=!ua`IP|R7^68OB=6`wly{ou*%pO&ghpxhb!BiK))C@Q?Oki&O1daK zRp}Z56ICf^YTwC>vx~I)uZoU{YTMI%$%E$7@x1mz`d?t^ZeGu7ChY{W z(M%_MbbD{3IDd>AZ(hTeu91CjNT)eg`pT!h_n5n+Jb?3z?vY&ZVzlEfD}#@5bMQSp z4esEg&k(Afby1ajmzwQR@m)GoSENn<)|yPvXGwGJd*J-a&dw?K6e{p+K0VlP$8JVy zotem?f9S@=AHM;Ht@fN9aAZ?AGlnjRVw?$ zg8yRgv*7LaB6{Q4mD&ZUIQQ6h#@?DCy45iE)GoPgwU|#I%G)a_?@=SOnQ*cyw<7$5 zS8KO;OXuDbirwn*5q$XY_Tu$fAa31Yn`AQT@M1IPE;{>le!S?-`g&*eOK5au;rNNB zNtQo!@;T}ZzZAZXFW{A9?3m!eOO7APT~W4dt^FzH;qAaki20iv$L5?>?j$X(;L3lK z#zO>_OR|_>L*QDBo$ZaP%Z-(=xJmoMmNCz5(Pnl z#{kNCDlv-(jH~s17w1&s6(%s3c)mm?0M0@V7Zi6rn*mx+vGw7z@CV%KBew|3#Mb!V zi10W17uqm0viuj^`8TdGG5s4>2>$Q560Fc62h50Y`Gu)R(`XDNA>N?P2oIy9HD&tKg<>@`+uJ;MkXfC{}hF< zw4~iK#4xrl)F+W>F=l?Jnw$^v%5FHVYv^)nD)<}AAxI%a#Qu1nkRoUx*3)p?4vIwq zFc$pox$%Jq^XC-UT|o@kjCw4=yWx15Fm`qb=2TFCBjTV-&V9<^UhZ(;s8T*K&j%e|jU?jn~ki4u>Q`IRtuAb`{JG~gq6bAs7f+*~l z=_MqBl0h%XkcS|7-~Zi3RZe7YW~U1P#Tfla0lreuv!$i|px93+-rBS*%F{Ik#ZJE- z8o;lobH=Lwm6JwroJNR<1T`igK|I=OFW;qurmCev{ZjHopDs$^O&$>7=thng8d0Fn zq()*N2Z{NqWnpFVv<2ke#p?gxfT|VYI=Y-5EiC zq&bBl)^~At27%AXKIioZuWu>@t9?Pa`bJ%~{S{7DsHZzqm8miRKu9$A{Es%R%`4X!A zrZnyu)B7%ZOWjrxeiC7T+b8?LytioDU_86~vF?e^>k#V0LsSoXMpDft@vr-SWethb z;=P->GH!XF>S;a`$rpd*Z@RvyIWb-gN+q$PDU zZT)^fw@7J?{YG>Lv(gM0^=Bbmjm>O@bv&w50kfBR8ZYIiSUO15Zy><31G|h6 zdbMw6bkOsD0wF^`EM72QM+vXo9s0@g#>^q*uRo)G<2mwmH0qCW`hpqy4jENiPnhWL z3gk~jo6ZH0Hu;h%s0ZTDNy#mQx?GI3mE@hXWSy7$M_28eozexCx5-8ryWTN%l#guD z(Aa019WVyX4)JMVbr$d${@#62r@Me7dp$>hpYA}DpxV(R#R6WiK+jZC+|Zq;%wBsA zJJ+O3=K~CQP!WmYahEPYZLu&P&vr(~@k9g3;o{BtG?0op!Xn-{EPJUUmiA!-*1xVQ zZY|;UKeYTDvVXAU`7^G|4+om_keNkh0qwRmbeEUDdjra@rnnM{vkRYNBv(+K!FT9n zyd!JRL0;S4G=`eXnB=Kja+pYGh^Jk=0~hGnZ=|LB8?Np6M7iuF#x!w;yy* z018l$P%XGnqVh|(m7{}U=y2?L);YKSVg|oSosQOjM@JS0hX0O^oSY2*6CD48Tymu~ z;krS9u=PQ$Aq9=7FVM?mk&(@Zc2(9P)t=jIeX*FVt!*p!(@k*5C3m<>B9~EUO(OtL z_M&I1PX-c=C|L6w1bU^ur+JIfb^Zo7OUa*QnR7zXHwfbdgM@&RQ_b&P*g4s&dc2)3 z*(DuNfGNF1hAi??`sZqna#s2VDgv{}HQ~6*#OA!8cj@=i&DUw0LjVQPFvFoOkU!*t zIm1PkH=((?U3Zh3zuIZOhjR#kvO+VfXpSd-SC#eyAhHHRyUE2Q44KK%2`PKttX`~K z6>NsQDNPDT3XVxG1A5!fsYCjh4%wGVgRucvFlfIkErI|og6zm%gNACilj1V+%6Q@p zW!#}UZ<>1dOzoh`d&zV-!Aa2lxQtC=F=k>ffkD4;hbZ)shLaU4@TB9qR`3YwcrX;R16W{i*9KkkfrQxW5!&~i_{yIt^M4YwTHzxvp_4K-KW`n%}NOjw)Qm=RkjU)-*!MguMl_kJH}OZk#fqzu;piHeB4 zv)uwiimEN;^Ha6}myKGeyaRrB!_72CCP`Zf-RKXoW)OB%czv&aZTSJRNI;V=H|lnF z>dV}e-X+^X=oVYif=V)^fI z!NkD)U*O{ZPx7*{|8L35#K7@yJo&#<(-gNHnQCjB-KEhUe!HB^@N>0-%S}c2`B<35$29 zxep*)wy|?m#gK*kWXK?dO@%SAycm<_Z?RF?A^l|*9RSTMm1L5vfjAR8rRB<Txr0g8Qa!_O;sS+uBA$qCu>r<6_ z;W4%m<$;jtoJmb}P+$xgw*$=(F4vfSkgT~l%ms<)RHzf|^BQW=@tx6nc|oJb1jwEf zdi6J7OFM$Zy!(@d0UgKRK}K;NA>%Y3fkyMsLEF(o^y+@)WM#w=vjQDJ z#xXZnmcMA`IyEWZc>*3LfS{+U))G)AQ@1?BV!`o~szJX&mQi886E&ql>z4!q5+WMuo1GHKL4?G>K^ua7N`)ip1mXbXg<%jY z7<{Jc+W@suK#AF>&~TAu9CpS~+T)mK`(+F5LH6NMo@?F4Co#SDO3pLz_E&&40c2%a z!uSkiyVPQkl?3itFrM$`(}5e_lA;B$)oO!z@c6&LF6^l>Rl-43*1EXPRUu50%w6cW zmhQ?Run>W|62#c6f*GxXH%J^z#(@Z@!dDL}#*ZjOcOj)PO+)VSQP8^LpALsXE(!N7CXu3o`$&_?k3r^1nT&t;nnN|^J zO1G(=no5~^ zax@sNr#;?+zP&!a(c_zLR^n~!76LNw3RYxlv3l6pcZ5Xwl^yU3cLaCh;=8sr&3@b} zs>ns}#eef++r>!!qQ)XVF(ewvi5k%z>e+GrlSx~bXiDb*ZEx?uNV7dP)$>lDlUxDq zRNLPEwMx%+ftKoQSJWQa7ux)Brhl75cQPSQEAUA?Yx?Za+-jLd#V^;TIh9G0h@{^^&&GE#%f3UY5@V@u`_x}5wTY>mon7g0xS<-#-#cYhd4!Cj+cgsFBa`TDC zP1Eh*c*iQkmudE_`e9Yu(%s0QhZmG*O>{hlXZB{^$fR7aP)|G?OUc-l*$MbEju38` zvk!lyI3FE*jP>d2)XjRiAY8%1`|9XPbqSrAIbPfoq#CpQ&Lj?y=ga`G0EH+>`^z6I zygJ@}zd!gBS4~NDIZ3tSENN{|9va9;#u?Ozw5KY%u|L3~qOTvK$=LPIzdMVg->%85 z+SxbtmmjYzJ$yFpCMjLN-lNm9A9L7`@opVlNIY`k3T1tTaTfxI3?T=V3)0G!=0#kn z%f>ZK$`dM*sGR<6&{_nv|3QtV!c*lbcUQS9-B%nch!97mSL@WcGaQQi{{%`y(x~*R zosC0pf)9Z{WD5ryFByB^FKhb)#-3p<9z9qrmovpZa=saOSyY+a${Cphspkr_ey!%9 zGKxhSbCb)&HByKJaFc<|YVs@3#?k#kw@~8kQ=IDxjjhgV3f7K<*f_k?`xlHaAG!U; zPK)i(lGswr$pAwv3XliNeQ9B}?euG=OHxp1qv;$u0wFwcb2)4+tE39dM^F z7HpZig_InY_b?KuA+QQTvuRCAg!=I|NgV2g&rX}OGj{1H*%a0S)$E-$xxxC{1GrMN zWRu*OF?XaB=!F?x6k?wBkT?%B&gi>>hF3y`5%%&73^D2VKi0Lzks#P}SX)rW=5y?gs5|POGD#E;I14pX>78I-dyJ;%sw$BatR?gvWMRD zQlMQ}U#DKhsd@$0*vBJ?v;zlvry~r(C6!Hi8yKY)Fihq7}b7 zBqwf1vR;cj&K1*rqy@2q!tvQ4RPznJ$_2x=N;6`Pd5X>490$H z1yd~tqHm0CIvxJcCTY|8?>3YeL5?a3vA*+7vl*HVS*@<7^Is!1q}o126dgT9YDkWk^L~nq^6m z(3@Ca>Tc1p7+4E(crF_e{KNZm@j+W(U|?q-5W#7$WzN=VEF?uBJc$9BylOu=U0~;- zhH{pFIwFFiJN@1-^6))$>ufKi@u5ZtAyQNLZmCEjsugqYjq~jDB*keqDgi;DOQp~o zY*di3{RV1g^mD(cEjnHQVR;HmEKuLgZerF|)3+SLhXjQ(5>mxJc1kr7sP~u?7tCB@*7kk=mN#ew{a?d8Cwwp`;lBXGn zxGY`idXJExkd^8hQDxkgwEhwQ)ixAsU4QPXHjI^Kw96uP?|#oU8)c2=MR*i9-^2>! zwE$uf2$+%JmQ(X;W1u@W*du|ye)m(!m1kmPLVRe*{}p$TeQOY1yS>Y+^9CB5luu#v z`%-OVzahBef~I8mn*QODE@O-B1uMLjT*nJuJLU>Zm=AC`;iP!K&82lld*qspV5JMN z3=Uy=Oc+UzCZ@bj}Sb2_234g+z%Nt1rb<&f1>A5OWy2E=`!Q_Gi zhLUw*6bXK)T)fJT+&qy^t>NC_Z~ube`Up4W<;!Uov3)!|5fs;lx$b&pc8in7?UIgS zq%9s7->dmE7U${)ud|solQ>79a0tu zCEOz_6sRawnfJFO7J5qcyxLt5Rpt0b_;Xck>Ugk5{4SOod!2PjQ+OOLX`_igOD};O zHK2H)zK-*(Ql1zs<}nY^mJ|eu-v>ND6J;D_VE(&#rhOBy2^&_`@&9!d=Gm8h;a_} z3$R$cKAJMH_L$rN8w9s7yc+GNJy2z9wbH^ZE|zdug656LZkXeV37qdJa+z2bBv|Kz zu4X;sq4T_*)-V$vhg5)JVu6vi$L_rNo>U5hbl(|Q={GCcN9dMn^KDw%kb*m+T&h&H zwTYnj>b%1Zddxtz2=OQqNt;fi>H?U5<;>^RHto@Dw-scbtinN~4FPPf>KV z)YR;m(9!7*q!bBA(o3<4I;zOL0b|4gEDJ-Q@^Q;j@KjIL>IWwXlAH4iX0B7L-j7}D z^mf0{EDs(ls}5}8QiM>nAgq{HL;e+T0Bp*a^3wBBP+mhWX#ThB9L>@d-Y8j^ zt4_>Abb@clTt>3^AbMbP-AE>@kHZ@qNmNkv_&~hENOe&X@cs^(`E3}EIg@K?21oto zL8y`INpawGsK8P9;{K2C9(6HHuXFb~b@SYDJq@}`w8=NZl~+`93y>84BZFamACv>*fWPeTqS7RI1|7E1Ci&7#;*d;ghA)r5P))swxFNn z4pH|oH=Ubq_Ae%Mu*y7oTKLqiJD(#^ zOFZ-)+)mA9=gpfT=d|8!LDblsJ~@8XC>P{I7(R#moUtEn;;k9P0Djs*XL7)x*h2i- z!N`!jpC^ag@jrmiOj2t9gzx{vte83eV`sQaZNm01v+DeycBdr3Z6r&%v5Mdjm_;+c z$WFk)(T)KfRkIwEe0b4KS2KKzC$pc8lvPA=bLHTcp1#H~L+6F#iaJdh20xw->G~Eh zKkmb3vF0!-MUkLRYl6x&9)RqS@}Z3=9=jl$Doh${l$s-(crLgK_=YDS0<1#}Ea%Q1go7sK| zYeJUK2b&TFzwlzoMvcTs=^5@n?%^kZ5%OEX8py`Pf*z(ymIRl|Xr%_Sb%n8@xzWJ+ zY(1^3kb#&^G&pA@jH%B_a#ds>N?m1Qt0e`k`|C82(5Xk>>L-k_AWOza6s8Teyp$b| zDKl5FL6czI-Yv1Ne5OM;VfkYJF0E)U7=4{yS4Kd} zWXcgSFWKWLWG;{-4l)oov#bc)sbm)Jt6DpB`X@`3|?LdHJCMwg4KD7UOheg0Yne}I?o(G6`5dm(QKcieH< zj$P>XB^&_Tqjxz6D0?e^TSR=I&G_@SYoO4N5@4+ai0O4)T3lL&dARl$4iMji=zE(M znP@m3-L<%BlLCENJVCgXSiMT!7qFN4z;7Vfeus&FSeDHH)q(wAw2SpWr(H*ye~XIP zQ2uV%EUFso%iMiIL;z)_6{iYznD1Acni7smRW2tpCu|b<@~04yX50}wRHD(g*F6!y z!_(jJ@+8!xmTgE$-%$4*Fs$$qXYA|aF-#cBG{_C&@5z@p zn|3`GxKptFoqnLf1-Y9Cu8N3{DF{I@fde+Yan|f$`-fM@X_%EDTCzYCr!^&)7XLMr08 z@~dzoLK7XD8}zG$q8X81`tJ@ZH(Krb3T<&3my(80X0lFeWFiL27bgHR$fZrh=&62tJHe)_5)KNl&vZ{l@0^_wM?WIxY zF7epm3=-zKQGixsal<_OnM8yhEi~y(6ZLfTBglEFQ8zY8_!%DJ(L}*vj+^{O{u_&O zRXlx|XN4rCu%%y}Ks=NXv578O>K)9)QiOT3gOn0fiX$XBM8L4{@=@k-4n^7&Qk|94 z^JKD{@`_(+jSc1B5?Zu#RmqEEeOqCK@NQ(xVx&s*L6cs%WL7fgK!GDKIulkm8Mz%KU4iOBZ3T~49usIwmc_*$XJyY`T zVKjf@(%LkXrpZK-hD`)*#GoKE6Qb}0RG|0MVRoP#M>87!a?ug&Jon(c5Gb8H#0c92 zH~f&>t{V63a@J;Z4%xyZj&kr;5KEmW&^fdqcvB;I8JEaS))Pwwfd?+fEajfnEH=7j zSUNZ|KMaebCrwxj>7^$xa1 zDK;Ty<&|f|sH}%0PwukD&rk@f4G@BCcz*k$iJG07VEdXCH?C-Ap;}#Jdjf%6_bYOw zrGo>NM=JD(GrEQ8J=E-LNH=mq&V_i;W9_(gqU_T4J<)V8kZaB%A@TED zc~N}xkvA1=Y`ex{sY(T@WjH!FglEDap4MEs3k4o6w$c}c#HAy5-&GvUyo3!{ywg}T z4L~5*VteXow6=@YW}{+^Dg~>vMsc-=O#4xq7>*M;7LAeZ>aSBAj@xyH7%|Pm5P&^g z1=C;VZ1!8Lz}XlxcE#NQcsRq+X2>~+xx(4su7efadgkzfik zYEV!~@LjGmfo33?;b8sfWrBM_TfP1*cwqo-W|-ui&9^w#=FY~HO{JeSiM zi0(H7*$fcPak1n5vN8}Gq^t=(I;#n;=+so_BWs8(O%7lSiKa$j znSmo~=R489y1E6EV0`fyJ{?3~8|!QAaja#`s`$5dk>|1}p_fjYKoyz2eRhxG8$bUC zmh3_U=O1zi>pw|%Hb(aURJvbjYTIqFVR+Bf%w`h-Gf#03>0{J3Pt+P>G!Or_{2*9$ zESO4>Nl<^>xrs}{X-LK$ajgT~kQP#092vNA>?V#R!$(U0v=o&~HM<^qwRE0P zF$`bQAwSUUFCys=8^n-gijOK8+jwj-Sz{61f(a1{b8g16PgDzhIan#s?rY9gjj|uE z4fid#y)U+}sP4x9_2qGNY|)R@$BDRZlM8XgmPS*(-CZ(U@<;8kMx72#4~eUbXEB_EMXN>2O(JwdwdB^ zIU2NUevAo$4hdDW@wVQ;)MHsbDBtn(*m!=`rw?=gS$!7WnMlvZmfsNb>Dqp;_5bZEwC1`)jYlg*Hec?>BWu__W=Fa-~f4e5)gDVy1#It9Fj zKhgl~Fp~5}yCjA0MwU)>l4p5^r*jT^JFIOp`KBCn=maTw&hU=omvIg(PYU!hn-C5K zmn+NX-RG^rJ?9^W>zI3NMl)>t*|^<0v=>kNgtZU{NySMDQWsq;`8r%ec3#I4ZAYVe zSmCSn1&Cl$Ok}2Ry_$!>f(z#hQ$8rSm4$0*6etjgl!kjK+X-v2(x=5+(?Ghp^{`z( zt4}qKZ-nQV_lm&b(ftqTy1(N;j>zg2HDkr@E_sIiKm;G6;Mh2;V_`XYtW(36mJq*a zo@eFtg7aR9P>-uyR8l*vRsFGt%X70TI!e5jR8HLt`u|`#w)iK&BCqg15_05C!|%F+ zIXFXkL!=O&zma*K0t@LnL1Ojc$l&ht4)Ka+1M66vB03=MjtfoQVZ6FvcOS995C9bx z2!?F)4_c|$h5w=;LsRDu7P3`7%E)#Uh8nNbo^=oLzU6I!7^J!-GRcb~=IaOnX}eyF z=|i?`*lPLR+^_{CzGF;(Cou&9YQdu}Dk{3Xwr_5?{z-2ei_k(37pV=Hpk8iWY*a3xc?PV3+J@df`)~Jzlg4HS za9e6a8o;i|2IO->QrklqQ>Bbcdi@!T@kBzquX05;C9XN3{U!Pm#DbclE3EPe(>?r0 zT7`B7#$ZxUXvsF`f<>`n2DwRUBwwveVsYP<+>&tYGaag3Bwk_2RW(kv&v$32aYQQNH|sueApGKw=7vECQmudxkq$ z6LqRx>)8v|usZ)ytm?ZH>X(UYH#;JoM~gX{6#FH{;KH%^g&>p!KtJ%GUhOKbm-q1gVZXqT0VzJ z6wu5@x&#zJtcnT}=;VAFHk6};B-kJC8+%g{MR@II41!1+YenY6ET^3lC64xR`^OOg zVuPApejR*`-@KSnHUAblOpz2PVU%c;L-D3_##r7FKXebpW9OzEhEYQeM{(t?SUzc; z*uNO-pDO<)azY#Bmt^OSpR4+XH05ahN{1pm8!!$k+4auZieC zC{I|lJ1G)REt2hi{6&W-cv<4D4js&*8s85^S?tPN6{Yn%{V%%*5gl25j9FN?SpddTYwmJ$m#miMJL{NnL_@Aa}8j7%C4Hl?dfvD#TB<)W=(||0 z>D3XHc=%KFA)T$v@r+dQ3B{3DoLK*ii60sbGnU}*)E{Tnbi&126 zKoJvR8{m{=rXmzcyeafSx(u#_lQYAka;_BQM^KllGYu99LeXR;(2z%n*|=Sr$xoIJ z7v&In7$X=4Q5OX!B1}<@yB#5i+95m|Vq8m1Nr*s-MItTjz?q^<#vIjnbTI`4AW(5U z$iV_gmdy+ZM2p(bHjvRSJq_l-!KS*~J3@`elJP4Z9t&rfn=Kozw2!^d(&qG^?!qDF zD8-^i@Vpg<47c^yRLR-PBVs5tm0|1Q>m?tWD?+|x{w0;LK(aQ=0;qQC5Bhz^3q3*& za)by6CK;rtkL)ex%Fu>QV^Tf0d0iDjXh?-A$}J1e1)mSY;Eeb_>A{PK} zDZsYi%J#^%=Ib&&HdZ|^=N0f1OdFZt7d3D=Afytut$j7}SwJw2Uax(-GJ`ln-;5rpBB?8NFi&>+6van#fimTTy3 z=YX07>bS=AMCyO>TE5zImOQQ^hA%d;!pZNq;}W>Nd^J~Z4{qB&dMW@tQfU2wvExzj zqeL|a@+idublX0|UIw}XwVd%r^?R-w4l@Y>XE(g1$sC2?-!ATuk3xl0nW`3mx;tEv zQk;a?i%3~&v7g$LP+4z{z|NO816ZbiAS0yl_mOkDb|^`*odjyn4BmChk{b zu+nhK(v&4&cd4*uo_*M@@VuR7mRef{1vx{bHN65?n(|DdfbaQmm;595#Z$&79raeh zFPlw`#oIl@(L`=_XJE^h&Yw}fjmy6HZj1+)o8Ro;qi&Tt7qg}Pj zst-o#bGF{T^ag#gk0D7g<>SZ=qK49h1sK;YjxL^BOyk~iAPd#qVCI&dRVmsGUd(n2 z%HpsuSiX$}B3)GN7p|qZ5MbalnhP%{;dUC`q{WLc?@cgu58yk1Hs1uF6tv8ebJ6B% z;w$}wt@Z1wtm)>=>gKHJ=d5no`x4GLg=E!>g!$DI;l0w90Wy$H-2`+tseZh0VaWq- z(kqaL&s39aFXhSD8Kxk_Le?9TWI~XTUxeK$>_Z?O=qtQ1%xWkD#We=S;Kl~2X9U0J z7#^${J_cmq--8T_3uX=mCOLb*7#6_o`6r$IZs3{oci4x{D-Diw5uOeigk#{Dg?jnC zr*Zt{Kf4|qcN9REcFEBcfu!XSVMqN5qO#V7+afFk=lseWxr!9~jH3V&^j{Tpg}ww5ObFcq^N~mtL~OhTX$CI* z@qw?YA(tJIRn=HPsja%}O1egrj1TQ3t}03>)Fe`k;&r&e;4QO9qAt@KkQl>o94=$; zqX?G@$4(Ek+$;-Uy$~aaDcXlxuI$|d@_q1aATggi1_bl1@F(@P@k^QW;jIM6_>PzhN#vd&vKjuv8#fN!Fu zGaw70=GD|tT2rR)Ev%()1~>4#gsIXO))mRsiMj>-vv_cZ#oid4uYKM$h&vDpMKNno zlXsW8cq{(r7LYFwY6f__Fpjk#de}2d2#p9=Tea2T1qwndF=dsQ?Gi^Tu+3|Z#`Ys$ zlVS;dN^K~V0XTCyBRSfzWZRR&kCZ(|Gu8IiTmNw=%pT$fR=&4}z8fU+FJ4pGdhpnTNVczj zTYYRjf1>W?IM%K4?R2$C*626|Hn1PjtYR>qRPWIyIam`sbMSg5HPg>O=X|7mGPYd`Zvh?gArBOk>a3^oD4!zs>L zR|dMDd+~tb*sI+qQ*T1$5gfq4>{~qCm74gU5WgM=5bGJRiyR8_u;If4gF8kjy7rdm zul)hrdwjEpI+6HgKx*77RV#=ee6X-r>JgJW)Vqi1<2l1+NkjE;w-{m$Tn@mjs)uA; zd|u#Z&PQMnggxL8%Sc4m+5bU7kPTnTu@8#`KyxI$E~P=tXA3eZJc5XD4y(NSb-NHhKK&Yh9FtGPO_Q)V z$1%@mWx_oN8*U|x`Jj=fMivBA1aAj~Ktm&8j2Z-a9*{vP^P^XQG(fCABM6v7ru_B>bDn8w{sbOnezN8+G_Y75TrMM18-=aseZQ8y98jd$>H@# zZ>D#{x0@e2`RxlPl5xd}wxheP6Idgved%#|>-n>HK6UMRHbj&1-SGS4`f2UkNXr@N z57_|eyAWsHhFMKbEl7fK8|tq{&*)I`6iNco#531Lm&%J)9w!Tit(f*07u=ic4X$UG z&Mi0RWLt49alMg^C%WTo5KV}~JY#0n%*nZ4z8q)_Mj#K~MeAYGj%cv?H&$)nhnDfs zbXY;wmc0d!fc&aF3FW`9r&y$m6nP$)9U5!H_?N8b`l*;EVO~LaX%N0o=PFsXA8Qo` zqJa_;S?VkwZCBE1(=|9I3;g6}RU;oyLKFUWRYG)6L3CMXtw82FB49B&H|!y}1c%i6 z8unO2BWTw(xNrjH6zZ0g>Ss$LXt6X|@PghUximwFGT>1&Tm#QSbj^K+ig$PJwEPF_ zI)^U&bgF#X47qdk>L_7IM$zJBZ9F0a3=g0~wEj5y1VBNukhqaR*n&>-YiUvtiDSIH zZ3ft&RYbLTfvaJvnSGQ`CY+^ez7M3DbfRRA-WFSYqn)O_ecBx%3=9Z`%+k#d8@GvS zVIfv=9FH0b*HdYrnK_9hBZ{@IrP4qq82oTeyXh?70#Bs7`+l}KclR0jl6;86xzlVw zB?VJmSZSynj^+#b4(FG98qYP=9yZk`F)j2PCLGB2&{eg*27tvJ_QPz3?hsB*FuU1f z9424+g$h!IAJy2Y$Z-So8_m6}IQkxbzKjJtp2rzG-8$nY4K-(hn?SG9(y$Y0TWPLN zg;jD%xnnN`G{;0tgcuh=oRecEn7EsHNt=lzQ|L{^oK=Fi6@ZJSuk$_w8*x+Dlndi~drp^?^Sxe1T| z%5M!qxp!}w8@#!Y!0l^p$BMuxG^TGE4sjXP_qiS z@C46m6B!fx(bFKGCyj+misi=lS&fG0{f%`iJFA=SGfKml_!A`Dnhj>#%eBxR2xoJJ zZ+!CGd8U703LO7*qL!KQ-<#e4_hSoJTCz?D!-!oM>ICHes>cWqyaiH4RC;F0u5x!& zds&pRhm;1V#PQb}R7++{i-`Vh`9kB=AE9_d6KGZB|H>Y(x0aJ~-w z49{0rOP9od(n!@9|7>lW$UyY7&NQM8-d?)KesLz&RSMBp&G>Z0m2d*(x zHJ1HZkr9PF4tu@4R#MReu8r)SDMTCGO@&VN~?D-)H%)99}+l9shmVn(Ll*A z;)oiwEk`r4=V#iomV~T#_>_`y!kn0nQOrCAEhB>`FY`!7R!Icv6(>VmCoGxIpe~DA zN2GQ4g;xEdC$BcCK{T~}v13%FcI3HK+5BSAwQh1`E24wIzw9x_&r`K-@)PY(I?yfw zZN-u&)ZJ(trD3$-K|1U>42e$m*X6EGUQpjL+dCfdZ}JZ{5N0b1o4Y=c?|AF9OgHZP z^*FmzPA`vadXF#+J(+pl=}i3eWvgtn!Ek@E;3Upq5T;}=(ihhJj3mzBCn|X$I+P}Y z4Yo*xRcc&NstP78@nP8l4~*4BD0ZgEf+ZED;vG%o-fA&`q~ZXpwqfhV0ToQD6>Er` zf{=%l0T*VU%yMmc{}%Wwp*?*h_q8osPBZ8Zc?<}k&KaaYXFZ;*$s&iQlQg;`f}Y$37&y_& zQ>UMi2}VW*5s+g~D;Gg8=x-QfFRHE&@*6cRg29U;#L#5Ud_v`pf#nX-IXZ7)7dE^6 zuy0Bdcch`_z{d+C-9AIX3#OnoNo2GDl|#kREVAM-9aq)yGtO@T_BBA`X5TGO&UK(G z0L_?hWHJdA)PM*`rU$w#Psit39)9n}v(_HUIq&>pm$~1_*bB-bN}h0)fzNh4*_2Dxdg7Sy| zLD@M4SJwS~K6b~p)v;}MY}>Y-oY=P2u{ySGTOHd@CeJ%FHBatafduWibkzAbEe{lO!YM5e>MY*HLE z`Mbij*%mU2MiF6?&IjE^S%@@1WFl$rHE(Dqm?EB2X&jh z=9l3gt2x+sN%Y4c2NlFYTNPKWbKv43^6Ob~-S%^ueGw!a8n@c#);vS4Y6^VPg(na3 zpHKPPH5J%cw7l&lY|Z*#AwEvvV!?5UYFBz zl|QCe$(36MZFN{15(iL#tcGf%n1k`UWoRSA&6^_M4=c-#nBC?la@GS|h?VD>app0A zpPhJzyun<9v71M|Rnvz3cYhJuUx{OtK|wT!kU#mC?;Cs}V8FNc zz9v7kesW={syPpeb{qD|SoyH}F8tzHo_bA$A0nX*`b(&s8FzBDZsg82W*z~`CIY2xW)#Bg?Grpn)cN!Et zqrMCz=r6!vplzM3pT6>hTbHeEA@)ijm^q|^VXmC@DIYT=_q|dgT5`TKFn+V zf%eUEbAn+}KF&qKK2`pbj&JkoT&mE%_SOlBbGt_w&e8j-nUk~I-r{oHGG`omTnbmz z%xUe!6L#3xB9G8p+lt9&wzWgaPPMTUuPtBSB3J$RUV{G8+gdVAx&JvU10Q?XTpH9$ z9oFaw$F&kZryBn2o$Ik=2se0BDO&JcJdbX4992q-oSmB8jM-a$ z*&%AU_$8+u<+xXn%PgDor)NmIHs0MLW>uqjt6xgVnvk@|g|H-DRYU|L35CTu30+j5 z@zim>l9;x_`O`qd_NwBzmQ)LEq{;o1O&n49I4@81fNDNxrk0~6eGlV>VVA}4R6VC_ z;;P(Kw+5uw2}18OW%+jFuBt^ivWcRxsH9yQ;d767TV55oaIA!J$)YOr>k6L+^8~R%GZm!w0Adi#=-dQwpS##MnHfR z2jeF9%L!13PqCMtu&Z=SGJOqX0%UVt6U3~$>_pEsF6W0Q_mL7jb1*Y328VRDd=(BygF1BlYMKJ9zXaSH(5^0 zx$2Q%1Cl_1pM1ra&XwxBr=D)lS`0{Pa;bbxCK9(%7d@z1kVH4=HN%GYCIfXX6j^T~ zMBWLgjpFeBWqZZ>FHu4!CRV2ZSk2ecayn~5@_nk&&yk)KLA=DEm`^9K;vN+?(`=s) zB}Ir5A*hHiQ;N@+zq@LO^-mB`z>u=uOPt3*(G1+7t9{$;r${%wV#@e92tf{}eTKcj zUuTbHPxLBb63;s1^70=09w?acSR~L|@{pb{X}yVn#$FpMP*25^Kcxd42g? zF|3a?2BFO0boX-0GYhEdmM3!w>^^;hTr=vV?PUQ&7?eV-<0bU${O=+SSR3#79mrFr z1m4T3(um|Vf6!O^C$|G@M&JIiol~A)6{T~JRNU!#*b{l?>^H;B|C$el78xPr6xKQyKdfS2^{3>kR#?a#S;W$OzuiFrzYA* z4~9q|nrQRxUb>2gaht!uGSSi(sz=}mEU8F*5LvbfGXxR^miNp-%IB_8&Msw{(~@98zZ z>CeAazcM;{<^-&obdw(b>ia+=hqli#_p&ms6@NFqGAc>PrB4@~1EW3buVDYNZacTq zH;II9;Sgh$F5P-0&!f7Msf^FUX6Bk$=gS zdVI{F@gJbf5{^Cyl{%1{!bszB%qLr+pCYe%7SBd^C0L;hoJ01#BgN-p4Txl@b+ zn^YsXg7@kLI{V!<2P?{=-{cra%rkZFhGt#)#vSPb#De4g1z+!?OLO?p;o01v0w6VS z=Cj+rqz<(Y>{B*B$nJ5|0Yz1QOP1WDnp*D~(gv~GDM+j=ZLZr2U(HP1D+7LiT$8)aS&yVAu#gNuMWz){PE!8)81 zk>aJc1=Cr-{uzWQVk>G4rGIbnhFM0aBaEVl`qPor69B3K2O+}MAuGHIRwOJO=xojb za7I4P3no)hL@ZxW0fca`gn+{h8tjLyUr#qPUQ)N6pA8r#jE>8ozWIZtlkLzrfSjHK z|BfVj63&LOq=WS53c~4X$39Ie)cPHCCq4lwLj3+WANK9KywN@FuF9k(n4$T?ik%_! z$yGn*MklS`*NY)^NH;C=1`iYzUfH$+RXfHhEj~`{S@YNjZOTB5i63>opqL@lf9k65 z0}-A_!I2YeO2OUIe+Kc0(teBd&zU_uc!8k3tmOnz3O}pwxNiPn$o-%ew|%H9fSbin zA_9aKdc!~sz}*qwgNKdW(w_sl3vapF=S-Ex=cQfB<#P>~C&dkN_&o`-F?3vUe1m?$ zLo-O|8J11->lAi&iU2-X&~wIMBa|@Cf;fo_Jm8WPjEOv~iCQKTmQa4DF<9W;pEIzv zA%w-UcGra!KOC2B;QPn245;$p307zh833Jw8HX?Ti+nDd!v}W-d74+=Q2y|;L6J4k z_t2!(V|#k7mlS+PS8o_-?Y6uEQY0BC?NZV+rPaAYuinHa>IjqmMI`H3cZYf)KjFAf=uD)n2A=}~n-;Bbe7ohG- zV;A9O7^4?8uBLjn1cW)NwsL!%bj^DE?n&#R_B`L;?tgK&>TD@I7CW^)!MRj#;6pO@ zk6vtW*7L_=lwE9q5OTT(tWD)>k{t#8zIdLjj@xTiS#K@9@`h^U4L@R5T5m-LaPk5+ zrqJ%450{hIOJNB~DU4mEa9x%OI^qhcZ0B{J+-Mul^fXM5aQzYqA>vjYNCgkp<5wY} zs*+a|SGK|?=q3-PVTMoQnpRd8v!yu_3t9`g1IWIY{u~|gr?MrW4lDaR>8R?VEOh%( zNNxw|sChr!;|azvo03<3Hgw&YXa@|a?224jp89d)Ds6PKpq&()1A_o;xh2Q|8rGOU7aZer%M~fygtNV zd~O7XKhoz%weu6$fyEWBA$-KNYaZ%#{yp^I`sD7!y7e66Q{}i_U`acusb~}c|*DXzByuL_?M^y69dzKjLbODl(hSf zI&{6M)t1Wpvu5}(Mu42`6|@#btK7%^6_ENfpc*NqD0z4FW?CqbSx+h@*!HX+9n#Nk z_p)WVZ=AC8cNjJbpwnxo{&eoc-G!-x5|3$2nmqbUm!CyaqF#V1oGxKLcRYd{gOhtz#a&ck{Vj%<-3VL_@ zg|CL(#K8{1L&aqQE)<$FBNTS%4mT;%qpj?AuBP0hN&WfYLSMoKTh_QavbKEr(l429ZodsS@W zIIo#$s~NmBOIaiW=k2ePJk*(fR7DQ`PnjH*OP8|B7c7UvQ2I|~s(C|??vd0N80}j^ zo-U1T+j7rjH9@(l9h>S-Coep)Dh+S2rEP-%Cl=TUPaT;O(939Hh=-6z}T&HmiBxM(~MhY_&w_4Ks|}ptUtu}R+;R2{<3!{u~0bY9a^MA z1lM*n*7)3>QP%|Nt_={h7N4{wow!k%_GqPrZ#ibumh0v+g(>36*@&KzK$|`IQkaaS z(e`SnRu=g6p_sItLQLAA&w@rSf*K$AZF)gTpL(wy5l_+MJeVmS9tG9X68~k&oUU$WYc>ek!4xyGG}G&3cZ&!EEO~|q!#=Ch zOOtrr0@YgqQo$O3PDU)@`_KY{2xC!>Y)i?M#Y+Q}q#y&_6D@*i87vDuv#ZHe#3S6p(e0^<*I#r-S6pDc{yIJrJPvmz8n5QCQPK#96;7;GQC80hSVCAN!5Fg=8Ibq5GN+M#aDVs| zJP(+-!cYh3U~*OpM!NiJz}s~1ce+LEx*1FSiLn*TTxnjwbA%DKc{9x!C2_?b4*GO# z$@`jkZ~zWE*mC6!)<7*v2inOZ>f|oQYDSH9x-=e&HRB$6R}E8-srW5y#VvGOP@z`i zwH`}1BoHU5z@d>l3K53{|1`e&eg#LAtCvX($y!CWtrxFF!xS`R{&s#*mK;+%ABr~~ zHh>ghU4rEuf_gW9YP*@J{wIKAUgRkks8Y0vvYh-U+X0pxHgR*e40U@S7=((%ZrV&# z4k|^hh~{-Q&#J+yl?3N~LXr!xqX7Du$^=Qa@%mWjtWJ}Rw&*-wi)=HXsEL*hD329& z&Ub&1j@2@lvIR2{!hu#!kz~OcRTEb#;&i8R71po2W>bK8#DnLbyKH&R!)>bkJ#(yKLk+Af#CA|PeH>AZ?C(6 zMADz#zzDH_cx?fJDG1Bw$kP%w=c;N!L3l)QDyBi;$jC}Wh@8tryf%On-gN+h{Zf3r z10$4`fD&*;i|d7c7^(FF#&WfYH^_B~Gazt|GmvWm8psnS4^*&8LJAOSVHzUvS{f!O z{<^z4inDB?C&jZl%N>6guG>=QAF7AuR&VV+Er|kWutwdLUS7WGPXeJJ`mI2OIxGSs z%5W6&nn+iypQ=d7m`!kys}A~vxu|%avwW3%vJAuqHo2P0;wEP^yUedR7Jqnptf3A` z9)LcJEh!U=t1$L;5O%v>DxNgM=)WD_5Jd?c>Y6qZ^nK4la<@vJ1W+I?<{SphB}DkF zoq&!pGoV8z*$m~d=JI5u4&RM3hoKxL+BoFk%jNXBVanwMT`}ZX-}ziSE8=r!|5Z!V zUfXcob577@DxPA`UVuXyonp#XMvP?f8?vA4k{i%4O+=57_FkPWs`cAPJ^Ch^7LPuD z4Ugn>0+7KEekxlilN5vK2mw(l7L(9t&TM-1Q9!-2s~h`r{>!G}U(5HLY^?vWqN1tg zw9kU-dsV|AmpOqb>ZXAgf~Bqwk>gL>-(QcQJ8T0Nu4HYN`tjslPfB5%z-FUp+t0Vq zL`;x9?#7o*LN8;BoZ;;x81Cry9Qnp;q^GMRt;d+GZpgYky6E!1Bm9c-+LH(4x~{Ia=a0VVc>r0U6Y(D{ z0i-dT1bX_dj^a@`eqYEcfJ`F7=7I?^6bjWP`si6CK}U7a!#`>Y+l)*4!Cn3B+1y*l zj9#|kgUp_t?>j`KK*c06N;Qq73=4Bm zPHz>i$+C^Y+blz|b$yezif^U$JL?l)O(YN4E=KwBxXL2B3Z}cm$YvRlcE$jdOcB~s zYbHwOT7EkuIL%d@jjLYwJfHB`*44yt;JsD~0|| zSgq6;wA@3u!J`7HBfO92&<3atk8xm5>Ls)HzIM@)E$PSk=1sohw0I-0b z!eqLtwo-3V@`TjS{tP0QT@T5bVH10Cb;+{p1MQ8GL&>EJMh&U(e~P5A{5~vPzMy} zKGM7`PsOo+aUP|eNy3v((~pOKOR$>?vt!=d_oxGcpq+!ZL!5&Gh;XIzaC(1~{`zU8 zVmVJpT)8?Q4eeYA_jWZm$tZfs2jS_Q)Lj$#bYOWQJ=TO<0c`w^XZPM_5j==Px zT=#e;lTA-$cUsoI5@Y4AA!2f+A~UuyEBYwRyF zR%_Y^+#(2))c!>#r;i7$I^1})YKAzMW%$}X&1E%BNr^scsffJSRQIDEy>NEmo1*)n zzIe{Re|Alkv*{m0wd*F+5(eY_rOfWO*9<;20FDKW8LEgrG=qj7A>fnU37{LiE@f7& zCvj=18OQ=O)q0g1WYw<)bXWvb-H%74MMU)To=IAm?IKsF;sa_{V(cYS(*;uW&eK>T zhkxAEQh?FJ_BZR-8lp2|`pi~rp16B#g!H4LZzTZ`>{x^fdg5=ui^`H5@7uzLDI>|< zKRofAK#?Z;r%j*?L1Q10J^~pG`8Y?i1Ff7>PG>hbXEb41+L(}}5tFdBisN9%+uEFi zA&(E2JYI~rW6K>3p_p~unkl$oD(bwOBSvRYmF2HAhoX9IZBWkr zZE<*taZRaUtP))dh__5NGG#t;>pyMQuvEUdbgH=+rk5fM((!pvQAs7Z6&Nwt3NHle zYSpBdcX6H87G4%MS>|xbeB4cHp!_Xf2R^x`O-WcYiTE_TMg;_4V&g|L#MQz(%xn#{Gkb_9cxDx|CU zTE^fShed7+tFk%~se#&OGX@Vkt9>p-|8xnKY|)_mngLE<_$UZWY2p+o)ba;vOLm>A z`Tg1c1&tB_I}_j0e=cv9?t->FJl?Mf1(+H^X%x7D>^hu4v|S{Dr+ihi@e?vI?@rE_ zUPE=jMBx6#Zd2TFGJ+K5!XR0S_V$qgLRArfpkrHU*ZtTokfODCgnPe(I zOA5T?MZVolH?m9g@q*f_uhuR#=+-*-Rwu>58TL_@-mizy)F1l3wwl?PiPxfmfe;wp zvowuL7$N=&7uZF|%gMNZY$GM2)4h)}U-4awf1CmKO3^1~nrXt2e9`a1EWN4lK42wC zTv-B+3jfr4o`i3ja4&x&0e28$Ycbbym@nnNLL)Co7Wyc;1=Jg134dvkS? zQ&tPpjUw#*OYAaC>~j1Khf_TAk>?xJ#8?<>w+}Wuz^8?A^oz+gg&aPClwS?OtxdBo zcwO;K5^uwZb=77^wwdhFPOE8SyDK}-`FLw8&)IydDT%Mmjalw^lf#q!?)q!RLmv)a z034cmQ;>N~xCUzfc<~RG%tr(@UNuTJ)L`y{*bLXdOn>Ho@lzPt8QA{g>8~LZ`;Fe| zysD9xiw{UUWG@p{Ae79^1NJmu5=D@NkEqnCXgsJQrP%b_7LTv5YV16#+3>6*ODEo* z=)mgAw{XUoJ>Enk8`IfES?12^#Mg`7VnQP$oz)iKUk{U#1R%vTCa5DtQ_K!O$JU!? zbl5@&6Nz}YW7?yr1x@ci6*dRjbW~vOMj6CER<%iHZbY}ens`4jA-8mFJti^@IHF*cgt2MaCg9j6gp;G)&hcl{()h*&TR?tk1Jg4Bj zO((K~aPO;Pj{XuaN-#sc>pSBTW>DEM(m5`osB$MbLvq2o+O)9*Fr~(EQ@$&%Ab|Cc z0+$gV$ilYB_rXxN*cT3CX&_LhYy}|``?*P`@!Ph`RMCRb@#~#IK02+Sv4FqI_CE}L;8Rghi59r3XzI97=k7)A?WEw; zS@6}d_%{k)S2^@Fb{pIpsI6pC=d=BMH{!QLFw>nu>oqi&e=1dAaGRpi9amuZdfJM$ z#3AwjCUBs_QqWhZp&?KX`o!%yMm4aOni(Qr+3HzOg1|wyHO||QfDgN4p}o2VO~+cg z?B&TwV?P^YX9BpiyFbQF-pbI8r9?hL(~W&-Cxw_3E`n4um?=QvDeTp?!&%Nbty4RRuAn`x+cKG;8Awu&P+H4lz@6@~Hy_Qo*AMvc z;M6YZtoc9W4cKHHaNmNp1@Fs_E*b-ZPlo1GXwr5{jQaL>`Hx&w(R6pM+mGtVGeWL8 zv!D)*SL5q*N*dB*A6Y)ukXHRB?@Y0Wu11F1J2Z|gn14KQXa%n5$k#8Zn>Ga#KX9I)8HE(IAMke9qG`Ru=B}aJxQHfGRbbg2Ky%VWPk#7 z(PDGp>?7Ph{%p3FIKYyI-BM2i7EflE;;^V!>Eu%&&y2&Wis+q|!DxHmjtkQ`3j&pQ z+iMs*JE-IYkZroIx)3paE~);#e#ZC6gj^8>t2QF&^YKx?F@b@ti9EhjQIk*xTkRBp zSTQm7PIP0^SEUCLPi@FUCakKzc0&3q5S`IJ2T=n>@)+7_A}ry|B!4%Y5{-X4g9HVS zWT1?J{&TICM(Unp3<__Xo1UL=9fU=ekS2Qg(iKuXipj-gFu6@fXBwx-LDzt7)|A3LCGW53z}8SU5r z+9DP-mDu1f{32E92fY)5bTZNno#kF$Q${-wF(x`63FB&hb01h-25h7mwY6gx>K_4|ot*!nayweHt9S zY3DQKpK1Hu(VTAX5ljAKEyQ0b25c#}AD)_>hO&jzPxo-PL z?`j{}+@2r9!F*gceG0~bD!kV+$WmwD_gd6z$1^f1ef1!ayWEAl zCCP3BekRl291Sc@MYk|)9|GVli(cj6dQ@Tr1X_J`OY;bjclm0PGliG8_;mRuNE-*D zc+^S^bO|L~l^|g?0PNf*OU*^t(Jo$>?pXK0<6N-oLeEK~-C5FXqTPYLxT04Yjx3_x z;jifk ziKwF8Cn<}!6F)q?agxDyGxDap`q>@5i!<~NDYN*O?O#S8>%Z{o8QIwWKTh+I`Buvj zzmuA^6iNcEYgY(`lyOBa@j$#Rs&bO>aH3k)lw)LNEuT->2XrP(2_~9`bC}1yOrrE= zTN7RB*%Vli%fRrynfj#XXdQhIIbQTfiL2m90fJ(RSQ9lMW1NN&;J+M-G#K>2uKM^R zE34lhdi+?vEacOp9?SRmjxms*eszE}a=IxUqQxo}dmvZ>Uz>(9wH${8K>1b2*d`aM6 zUar8Hmoj3?m_;gxjL~3;Q-^0DhPHhd#lLV!@7Xq%lB=tSkkvli#XK; zFL$&~o|?D~=4cBF0iaP6!*Ed`k?vb&FQFo{6GKnb^Sk-3kd zGNlDk1;UZ;=Hy=0^;`?%68g^q{qo=Aq8Vqo$!Z?gt%~HLwQSxy&&LC$b`%~4noJVH ztzQPs&f*kssIwP1RGRE>&$IyZpSMAcsod0z_ZJ^={pq_VY_?)(y9O?aua?XVnV(|j zMI#i9+2ONuG)%KbQ@9BLZeURfAeJBF22&HWnIHU?Z(qge4R|v=l@zhe8TvfH=SaAs zp?W#8=rcc(sXOk$sfy*$)uSoZk-HdtB`b<1Y)`Fq&ck7!U=6zN!@qnst@{lV-*6V0 zz7a2SvgowZ4f;F`A92)7gBY=L8{J?hKe_yk%vb}W%Z`wB~^Jvu7Y1J&>kF`-{ zL(`69n}aJa?}$hw0-~?SZUSFIaQy7!dVI(bHt$NY@_Jk9s`P2>Cs+B1ndlRJ#79X< zS&yL4ygc|^xvwp^`2lz%duUsJ)>s*MiKUfA6QZ|BU?ZG(S(rhbT4$h3BNkN^f?I&_TwfLQVTj2SF${3L(20vnJ_jy96ay%qjfiJ2J3n~)l_M` ze#~s&?c!p9*F}63>O_& zT?m}>K$!^pkgym>NnIY&5NY{lqSN@GR0BojW!c(gd%Aozhy+G>Ya@K*ztnN@!=vKW zq1e2Ja%t1Yf{Y78VAEbA@f`RPE0EK;GRD1K5DCcCPIsm-BLw@r%92CU9YqrO&tafy zsJ)bTot+VdkDRqAJ1RVf%DDRu)h_0Ry0f=g9xXwq@D`sqLqlRA5^9}JMAxZj&LRF^ z)Q>8|;D0MLOCp!P)p1-V;wP-SX)%UQmCR)B*+_M58}iBLFkLS~>rGOuFOhUl;eF)|B+AWKdH?NDoWPvJc6EjH373~O98i`vu|BXiUW=$6> z^F1%T$Y+XHZ2T~Pb53RhsZ}j@3BV(p%ZV~kD~d*x{W;gRi@RiAy7P!_1Gk}D=;DBo zVtxx1E+(i`r$m;)+BckNE@DASi6dHogeaNSKthU*1mPKr`F#ry8~rRxnjvb`{S#ZT z-~q%79XXoesc{@CsGQZLG?^&q6w~%2Z_SC@Tpq8#6-U{tD>vxZneQ&EK3{TJkEsuy zOG!NWEk7}DfD*{Of&@Z|`&;yoQ4v9}jnr%Py21CNmBMHFsX^XMyf%k-$dgw(87Yvc zLJs@ursvBN>oJ!uFfb{|r&+J&jfn&o0->xgT`GL$!;j>qn<&E%c)*ew@n5DI+rRV= z7+JsB#{c#C5BdlH2kNyrA|QGv!$=7;QAovQj*;E6X>6K5_FqshPnNXqt9S{{lnYYX zf`SH05Ow<7t^WQu4n=c&yqTS0XtHwNe)_4{4KL>0iK%oLn!1cLeP1+ts&EEk2C)Qn zusczEtWVXyF4-y%EXYCtwM;5@1I`Z?KYnfuYqM%Y05b%|W@WkTX(b-(iviyYkHyuz zKlrzn>wNZ)mK#@1k(z5>+tdFfKxU1*;VQfwKqx)Hp#_eSsE4-{!2i$d+>hGoMCWvj zDSDspN=a5WXn*!-n3eFKctKJ_;$&Ab@ZN0}!>Bp?u8E(B`7-Xaw1}l#-pfgn*>(|2 zv=d^u=*f zLS0npKc08-T`-n4bdCla+ka<+VlBP2HD_U1G(9;d->>VusO*`xNk>q@8iWV)`e$ZN z*`-L|XsHg+I`mMbP{J`TT+M{ilnIE66WPNo?G6Mx!L!{xOj2u^iDqYst*uYC=`g%6 zj}q|e$s{*&@Irbhm>sAjm{I`oOj}uF4(0xRcR6c$tTfSDV+$TuFm+KvU+s%l_wVLY zZNnj;N_06`-9En%T1z4`=U53NQAK@_Kd@!Ok;QEA5%VolCeT1M0-RnD{`y_6AB$%M zqZM5gwNGSlS9U;jDx9t|SOs_{Blb z(?@f`E)J-HCi%v(sly}_F|r5jMVaS6{>-m4)q*ZwTp?ks3kGFLLbP`P#O`3=i?JkR)6bcJisy?tfBd)FN5silbfC$a!g0)cfP*w(9F2Sm zz*Bgy<<6Iab(B}3X&Si&)y&wwEn$7$6L!NH**d!}qrhrKfyIDT9u!EfyQw9#CeQTi z{EpJiokvp$qIfP9kxD*hLe~N^%Y_Mzg{C`eGZw^CTJb>$6=o0-sgDq)HC3J;?f5Fx zhOCK_X?^W8pDLniV$~w0lNgsJt4YMqwqEwRHZE&PiulSNlRLIKi8m{o5D2QjZ@ay^ z*^QyFxp4H)~TpH*%GxGaanaFe?3@@ zsrrLZiW`P2Sl>LY>1}^NC%ohozezZrq;Xzss2I{nT5J3_>cZTL)(wxIp+7eX7_AOf z5Y=AdPbj#2Qw{=KD@AvzP1ad@-2+cXjTik5ua{ZFih?d~V=;3pDcQf zlBa6ol~SUB<0Id%w3{k#?u?Q?^$w3gxh0$+?PD8BS;LQRcpg#6E)Nk%82kQRZ#Xekw4I5`r&^R3k*-v8SU)l7cbpPDBTkig8ZLq*XaY;GDvt z&7P=KBNkc_lWH{JlYV62>7vycj7j=dlIe+n9VppO_zf4X6u2Trj3lL>s48`zYbN?_ zfdia^pC_^qQH5War$wf&s2{^%x-YNvn-^w|C;W+D=Uo8H&7~jcDUu2Yx-h%=t~T)m z-VCXF50H25a(fS#miF0?6-2RL>$~w@D;CksG-x7g$fmq?(g7+qed%|ld-()@1G-+n=;Moy6`oAo}*N>xO4D$m{ z+Fnrfhk7Wrr4=!_NEwBJf(0u7_H%O`W(UA;X;FpCP;&ufpVZ{#O(c{o_sCf)g1PUF zMH5g9f(1c{eh>YU3v`>2K}J&B6@dK3L__fl4^ODn5POeQl_88Fn(B~5+K3KZBZ1mx zx29M~We9Vt4WUL7LRg^BG*T)+GI^A7rIL~&O&T1AF$8#_4pGl6k_k1&1U;nGGUNqw zeqm4F4aDX892}^fn4I+()(R)~U#)kAJ0eYfbPvvVQMU3XEKEJ!#Qz*oTE5#HwuJzas&sM z5vFw+C-G}&w#g=yEc&ZYb<;C;QTOB+G&-HRGnS9n^(%bdO&SD1@5#Z@GzG$L<-wHg zX~OOy5oM~jVM8CcQ>b`ot@SlLtU+-TPmd=N&Aocyo#UCu0%3|3J|O@KJu8QMgax1? z627szzI%Fa_!uaBqzv}RbBZVnTC%y(GpA_b1WGK5{B3j&Iy*PLUYkPeNzKnz^s{v8 z_;yNAG;cmZ$u_3x8Wta%40_xy1n*uJ9aW4sAdKH}@=nJ3YWTk2Uk;vHWo)iN&>UeY zQBB`C-Cx2f3HVRKIq7E^IZS8LC6vn8$+_ap5H4HiG_ZjwNvW0#26{vQM}u9*dM&K- z;=`S4t;k5Yi~&S&`vQRko`@=w63QA8Q;^Eb>pV1IjtfF-!92)5Ew{r9s z_Rk4^?Xx?4B@8tS5=iW8<^BHcn2g=G2bVs++2Sqz+J@%w#k^Aar@i-(b+j;W@{9sw zbiCB1!fVt*v_ad9r9LWy3DeRALHsa8M5Fp3e=0pXuue5sx6*?Zce1v*E|YLB!$iv1 zdXRWWGuq%M8!0UWZIp}>)EQZ-+9r{;AZZk4O61=@UO+K~$FRHR>Pp%r5?J(?5F+^j zo#2cn-`7B$?HeDI5Ll!9!P$MOgdeJLSQBK3eOJAe160(Yps%@H96<}f@rHIo1*kD) zJjKxQr)qo@cW5n)%(AYLI>d!7Ndm2U+3y_BSOf6j`oY@2Me~8`aWTiu^u8bKCpvtH zKBNRA-w!%%v3+vn!U!T{f6jBXRp2}J+5t6Q+|6&^1x*UlVHtt?fMyC*e;*)hBGY-J zApc=d^>DuJBCLMH+!kEBW)O*=sfN_q6fJ1HzDmG$C0JRPYC%Mk-%~NbNVDdUD%lMl zq~1DAxJEEa*tS*kWn62!&W9<2v(c)z{KR2KWL)_0vBDc{U&Xs{ z7(7HrwuVKu@Z9{lz5>}L^8Vw^eTL+}&mdNgejHFrngLB6D?>J=O|)QKfw-awtcRo_twaluD9ydG?-dPZ8Nb#5jsHJglVQ*yY_zrO9UYPhlM*ahFbX zOZeIB`pNicc8601 z$mU32cS`6;1k)t!o5O7BeDBn~KL1IhEcLfd+fZ4S&>c@cFZ4Y(TUBSUi9e)$8qoE$qHY^#Jp|4@VW;RxZh@@AQ${Z%G zUO$f&-DPgKwcoedFRNTD=$gC@ba&#-VxWLyWD)VvY4Xr9{B$@Pn)WrtYhO&d0m%;z z)=>c#*ZFhSMs4aVre#Kgt|oIr>?HhBo?(M8`X0ix%J$i%6Wn~*tA2Ci%M#K}{M5=x zlyO3Nz<63km+?^G!<9bovFd@KLcNc`HbeurZ6-4xe3x&1WZ(!nt8%JBiKSKgp!3&G z_W}({$-blPCetMcLuS6B39nKpA!+myoC#ZsYCp5!+Pq%00cPE@Qyom36@BwdI|Pn> zWQ%-r8j2*!r=hzsi3plKz9i7xIx9QdM6qF2gJ}_9i1PTTiqM2kn$M(2MV3&q*+$w| z^=->zM<*k3bv0XjE=+M-XJPh5L4Ji$TS^s$Q|8Q5w*O=-~aFOuHtRRs<^BNCyar@SlXFS|)&3`i@hmz#S zGQ=%JRvkqkHzbQTe*G21KAANUCxJ^cmd@P*HcO8Ni$0T6i!Br|C6k#F$rlKtj7OE+ z4Vdt)p7DRul1d0PXM6v&)KM{UXhzMv#x7Oi;7Zfex%+DzPR*iJrF|5PmlEl9#re&tmtM~AR(+Pn7ww;;va^olI-~|*62m)6pZTR zWr#kPEh6pRJUh`A%5kTaK3`$&e=_wk0(sg-i%kKBLB7?7Cl^Ii=;A+T5BpN=dv%x+KJX+0uOQ zI0bmJW6lSiw8e8kd5%Yj{2}pHztLYVq@ghjN2d~21NTvBPR>R8RMMnD#}a~7EplA~ z;xNA;XXAK)>2Lh%01H7963L#>;b;5E36|iTp>ne%TzkQ9-dz0@{SR9jyAc;}>|8!lXa6#KIRB+T z!N|_|ANMD|&v*aF5&G^=FqFy*{8`&vEmc63m}@il2eCQ-KB@vUylF)-Nmx<#?uz>@ zkLJ{19LWjV5t@q6v@1K?&XkXtrB%}Wb{&gsE_=7zz3XVLqM~6GJTaV1)gf71he8_) z1RJ>uoH6b@3h8#Ttuou>F&{Go6sJosu3h?Y+`pJP3SJxSMn;mw=)AZ6J$fcLmCU+z zvwgUnmcMDnJ6ZmY@TB=0hYIE*|ITIuB8Yfgm`4>5c@kv8Pzfi-^cAPxEGgK^o@agU z#o2Bv9J7EEpikc9dtQ@*u`wj4?r#)ur$h$2!#J+vHJK$KduI9%0JEOdpdg?R?8@QB-X_x`D`tg}S-Y5^Z@Va$XCoLUt#{MS}cq}u>LjEaE~S zB3j^*mZZ~hH5n;Hqu8XogCt9o4J2bpZwjGM9}YH-3n`csCbH>I8ZnR9;}Z<`nXMHg zI_zXySGSIeio&M#pYYl*o%J(TJhc-3s@pL%yO8A1-@Z&S@Ncbm?pmvT>CF{wZR2BT zuZQ~c2QC~b8V#YgxE!uJnGz&W?4|O-pdqSQcHzYMu@E@wi>Q3_t~yriBF9A9RvR)E zuhpgFmWRCDA=Q58WovVWEumpRl(@C}KS9#zfA~UfnD52R7t=$!@VTtchD5@XAva7` zxC3idN?3JA29{_9M?0ZUePq)&cM%;}%@YN%m$H<^Ezh~8-^}OWiqpZ&^Ul21e-jWE z;p}@FfIhOkKWF*(xC&%b5AJxY>rmRJuz!4c_uOG;M9$XH^ahI3OcA*Yk@gU>>=Ms_ z#fDmds5g=>5eu%C@c@%`P|3bH@a&>O+(e5Qq&)fX2U9AC5!rK;$otdc##6OG=TN!- z56a#tNYZxO8ZFzlZQHilW!tuGcGa`Ab#Qx&McP{eD$jGaVH*(JT zj5*M0CWTFRuNjC=_inGp=78R4i6+;=i4=Wx621}B$5GJ3EB?qT9#Ih?{dg$ZGg3W` zHnhdakFv@Lb-6?gC1Xw?v?_>_)~kK=ZVm`0g7`Ld{}Unn#{j~sG=wA!)mOm%3cx7W z$CB`)>g&arzU#vZz{T0Ux*ae4MXj>G_y;SK7BOX+v+XK$5Heu`8mC- zh996BMEO0zD>TfvadwZ8A0SgMGk5rBf2uUb>b0(4HMsQ4tbRln8Y)CRM|w7w#(wm< zj0LnfTyFKTsBn?lNU7kod;rCAKu@G|(7E;!6e|Zt4p*y@VOhP}q+pwG^nKlEFgTa+> zI5sdodAI=u+$BLbtZfO4&yF~<2xkEtAaF9WzZPM5|HSX`gRqSRJpRp??-w$5|HRf4 zhy%G6NQ9VMqswGEa7W5<+<9#;vfe&Bg#nxb5I6!DL;N5R)H4r2m-o-UhkS(#a&#$n*wvj{pWYZ zX+5qH#g9~vWm(b*TZM8R%E?NKpp}E@159Ka^1PpWk3XTa^`M>a=^nggvuLflLF?FFTUG-Ej=M9n22xPy!ymNqQJJQ^U{pJGtJgJw-Qv&;l2>k@Y* zFK=+7tJKfI7q~MyGhz$WL_|T+MNAnw z;>k{fC{fA#5{>3;aofXw$sQY~vfMcg!}}MOGOF5fJ2Sf9g4*_{n!jGjNzQhxHuI*g zi>D`RrwgNeBZv_g#o?0N0Rm|m6gsin-6L~2zTTi^X>)TYwx>*n;S8|qqW7lv9RpaC z|4|SETrf$Zdz>8)g>~-s;M4dCkqXY2nfJ3G$#4}m)|)bNOD4>y~!IL^(XTjR*~1l8InX_avrABAT$IFAvp!a8@yPZexd796w8@ zw9DGRL};gItgpXYt#2U`1fC4041!sM8}2brru>w!f?v8-anAo;7I^|HUn)j3&b9@Z z7Sp-0F$<9>Erg8u;ulhOycbI3N*@c-ZH@NotRe{H!JT%3g(Axdmj^(_py+}g4(noZ zdr7TzET@6!SoayeI}NHJ&L0F0M=hVm=5$@VGsqFBF?+opizHk0<|NJTNqs-3w{P*5 z3`EGgA_D7zgpIf6kPS)TGNCnFXBaW$5DtKlkZ!FhhoZxr4NSLa?SZ29ib=;&TDcZHlJW)%qlkc3dfqT*lbZ`zptGH3orF~F&6xD8y=UDuZktA*dP zKik0}zJ68(1XNrgmY{55eJ!xOBxrC7$`d$WVTWP3 znb2h^nZ5!Wx03p3soHv%b(1LjSr7D|Z6gg=;2L&?ADE&r8XHPDP!%7ym`65{uxsU_ zX)7+vRgtdXqdBRag=WyLm~5Ee2I_ z6goiadv&AYP+>5NPq2lOFo~D5xdd7ws}MqAa{F60mN2AYNi@UySE<_oHYBNRB=uQW zwg4`F-^TTM!&Emod%G;Lf!e;myzx_Mp1W>lI;mh|D7dw+h!LKqqy$s6Ve3|!Kvuy< zXRESASQ>5@h(5E^XfF2?Z*~9!9f~JZ!8XId6z&eR#0GG#T?d-glWr~s4Nnwb%n$?1 z99hiZl&f|a&%db`T*O+4Pg$)53e5xRPbKfA?0N9A=`U))Sv84HCKw@@ODZWPhav-Y zyZ%aMwaDf+U8jHWygOyxsLfozOtMSh0313Hbv(f*yRu3T5OO#eU~au4(=k39amhI0 zb6GyWA?ukKr-g#JFUEf(*kP+BXszo_sbf$$fNJCmNh(2B++`OSkqCpc&9bpK=U@e;>2GBjC4Tc=XM=dpTHOw6YrI|AG zSgCNXspNqdnC&cO>-WwHvNhK1Iu87G!2V=3;wUSR75qkM^B}P3cJV$@QXLs!!c~e} zKUwGn|I%~Go3pkZbbZYm9tfwOwj3l;_9x4mntV7|S_Brq;Hj>p4pI04518P>D-K{y zvTNk~F+Je{SCwA#20q|i@lFF?dBqX>zikr(bZ>d38OTQuA&?KBM|6R2?RWu*QdEOm z@Uj#^ER#FqjpL2_knV>W?F zxpWLjk5HfA9KPn2q^Mg|#E5SWU%HGf(q9fA>0b^XQ#vXB{7&V6#A_ze_4lT%1yt4I zxn$SF>e1G`)DQ*1{s>Ph3&%DFZaVKA?az(|D-J?PVw8sSQ2$ZA|3t^<+cO4Z-w9Cr zR=rnl{8#n9MAY8>JavIJ_8))$q6?51`)Z-0M-4-3>vJ7mAxPjUpHA2z|pf607_ zf608h<1XykXtKzX9{LhC@v~M&o%HK9HCKN`)uWlDJbwME&n4=@R?J==@@YTM&@obE zpe&_Qlp(TRH5x7$HAlv#cCFeCABg0Q#QH3Yqj(N=WDD0QMl@kTdt2&u-u4~@!jD8M zKvXk^fW;t%n9vBAA;@qSPmXaLbUxxyL|<5@*Z93%Rnb!Rqvy}KMVC30AAhZ>uMg8a z&4(+vp7W0?c$XW3jXf!n0RIvn32*!s>x+u`{a-t?KRh;0BJYRHo>k7qtEqhVwTix))~ zXxDkA_DP82Bif+ePL}1_KJFvJpA-*&Uf-2an(m3MO%EJ40_O3Gx6I)v-Ft z`*Zz`DdYDS!#v^XqJyf16`7c!C~mc#u}tiDd%JyTv@$;=Xnu%Z%UWieSu|JIkyfJJR3sD$9Bf&2H)?E#LO&CCxAb3a;wy zb2Ea3Pz{<8KvN*UUyXmkm0B`*a8+eR!>_Fhxa}`qzi7*tscF4m1r3~;MW;1H}cw;z}^f7_W^&^M@ zn3f6PClPt}(um!OOk?X1n8jDmDlC8VN&q`t{>1H5wrFe3SL10d53VfX-Icf5arMpmSRp*02C?j|=TUz&O(nIot%A(twWZQ&1Rf~Nzhydn7W$h(X`!?I&u|PA( z%8aX&a14+;LdNyZS@4s*6uS1(Sr8|OPT{$zWAjXN0dzdQlCe|{okB^W`K$gGs2P}6 zE)0WywUES27#0I;whEs?B!ky#@W$B0RU8JmQ=Z>2eEZ~n-tKMip^y)RS3kzW7f!HAOpu_MzC1u^c+qLkbv2q4~oWw7;FLL zdbh)6_D2#c@pG@R?Vx>Ia@Cr|`6z~(qydqI2(l&{^VmW|u)C5&y3=R`rKf!$PzsP> z2(Oc{mbdgKZP1Bp4km`yPnTUeFfZ-Fbm4RTDGC`d2ow@6Wl=QmyOm<%CQ>*zAg^43(Qqfk51-HL+&la z@eaFwl(+v6Et!S&A6hae`@gp6JNhA=v>}4feO-%CI;wi>z8yy!Nd**41PVUdPdX+@ zJ>w~A?J-A8_?43rMl+U*eqEFAuDw5JzPPZkwX?$8)i*}fH`a=d0m&ZdXTZbww0~}R zn;1U$o#-x8^FLa$W3$Y55&uuoh1Fl_QIx_)#T8{hn2k?ytUWL8yL zF1J%lLw4x4c;qAo$wXvZU_b_ziQZ1P$GCE-H+QJ!L(y`4uf>_cg#9eh%YWtMK{bUR ze}hGt=3SDGT17D*hn_SEKVzMd{~Cb|ktju8RhC4rmk)mv$>kW8Y>g%U##kzTXBQMY zsxwb1F&HnU{%mab_nGg&TskW~cGUvAU?NFy5YFiy0_qtG{<-EUwu$Ue8c2Hr;yq{* z|DxKWy8$&QDd_&o+)4`TtQ#Tk zi3TBO?8S=gaba1y9x68U?bKG-ce*9Hvz&=P^nd$@wiQ=M>`(pL*JV0x!tcwa41^b5 zdK%JxceY z1W41GF>~m5zS)rjDMwz)0=Xq&Jji~E3L%}v?0yH*oxeOF@ro5NPop#-f3t~Za;5%} zzu)y|Y|)2zuBPRimemB#_YWZo;?`WEf(**--cq;0W5)@T%RFhR5$D|X<+WK*i}jC@ z@pDl8S*?YQ*UEmS4w6%I8D_X4*On#4(3lrN0>ij^3b~st$DR>;Cj6 zvJ7ZwKSMjbsHzESGmG~fVzbJTl>n9a6-eNFKa?x!@+d5BKm|jBM~SEH0DuM|I2@8w z*;Bv(=pJL-hX8(!pieE2t*W*x`d!CTYH@2C-+h|aAvAjf7CGj)1;a%YYl#yDg?uwp zsQE+v!{__4^T5UOWbWZLpEZBz&8(U{=dCG|yQ6^#d|Yj$*tjP2EQEpkbho(Zq6Wmm z%l63cw({}W&j=ci3NrXX{|Ync#vTHsFjN=aS{=WDrDsDsZ&p}aG#D0VerIb{^vt#? zIQ35~uI`U=x%FKhy0GPS)#5-wRXAP3lT!s7FvohnG@9FtZR#(ty?>ujz3meN6`Iy= z#s<*mO_{I_<@G?;I-cqnX}0A1Tpe*!zmMEgxUiiqGon9yD%nZLlC$*lt(U&tA)K} zJ^;2aTqJGmh*-$K7!jg zI)Ro#U6$+DCL8&46LkQ!R_nzv$|wD~L;cu7T=#U;f?NEZ4NQHkB{#BbzOTm*Q7I7X z&Pp123QzHR!A_ZA**QWJ6fzsr= z#(Q=OZR{9C@+WrxQA9;Q&7h#b2UhkIb9)ZO#7rkvj_Ewjm0b*r$1<>ypcGDP`>Z`4 zoggFUoHuM7c|{&Jj_G`NYx`&verx->Kdc<1PHnur&3${pH{h%s496qbI4IBvf;01b z1Yi`B4dTum;b;N^?=-k@1!X7u%x)a7-NR+6<(cvLZ`a@#?mt>Gt!_%CY$o#x4afVz z47jvA`~^OE-#>QN*uS@vYbqgZkPABFDi&M1b~uEz0|($Misb_teVi(1TN;vp>Zwa!;S?4c zb$31jQ0+#IGTCZcNm+T@trnh@qYwGCgx%$uZ80>q)5M!>KXKHuxb*zTD3PK+CiIUK zn!%}G88jFJo7l_(P@UA>|JZBr>V&|l3B!IG)D?VDYRHzj2*ew{GUCn!kRR+gu^MXd z-JF+w{!|}952_^QyX8lenIct@G~O*?JOLSR3@3^VFe{QmH(<^mdAs*Z`~qedSpxcp zA%N|l#C4pU{~AmFUZwtxLFoP)gAk-Tu_rU5l_I5j>8|5I3VuCa`hZ7(P!LZlhzZcO z=9ilT4&h&9tRylXkrc&&0pt10>-FtdsWgiwDa*@MDAJkOGx`Ymad&rzW~T{L{UDXX z*p@Jm5JHVdK{G)px!c5{@T<{(h&+v)CpU*J`8#0o|m;W6d=!_E?~u}D5>7A{LVN)sm7pWcP!c;R7f!2 z6^Sg{+?u>W!PUI3*jUrv=Q~?~k$Ell*;MQ6$f7XZQYhkAl=Lf*QCagG-b8j%+e>u{ zH6u}pf01p`MQ4pvPKY|Nf=XxglfGQG9tu}2!xDaQooVKW)Y7;@LRG=!ng;L>XoY~)xL z)xTjLqf`oCl8 zWk3&EUmDzIcd}#sZCmeQDIKN)_BY>@D&t@voTi|N^f-KHus7~|2#~)G7fDtaBxn>v zs^66WY5pDp68-fD8Q#D{Lu>cDM2LHK z&cyRO@igBnPeRKLc%}sRbzH;2=7=*71GZ26DXir2Xqj_uVtfbAr=-!P2zIRAL1ZN#ih z17osnnJm(wf3D7oqL-pS`uovE;dS~Uvy8VcHQcM=hS8SjDp*6IlC**xY6Ml4;@E=Z zYv@K#w`rrPYW*t0jtwn+0$v`Uh8k>uoVc@(cS&gFJtK^2Y7^DC4e;TC@T5Tyc|964 zn}P^$h+x20+Db71|g5sN6?l5Brk_z@57iwra-uFQPk&$k+bU-P^#>q zO(ok~7FA0^jN{tCK@4MvcOrt&%V4H4+Zo58fbkNi*?eb&s$2%|=N;s}KY0L&-*D4N z^Ugbz%ji41thsavJg=(kFC~HL`Yt_p=<>4I#dkAiaE6K?=M~;SDB|#m*bF`3%^wM@ z(x|a_hT;;=mthOlX%WILiEKJf^)5zbV3G7aQXtq(AcTzqek=db#oitkZT2(@L{iN+ z0b)iBMi^;6v|HkctIf}^%|DMS-iyPbf-T*eH}pB!ODkp-1Cm0XuW<2g54_#i=hb}~ zJBQ62?YWb)09Z9zffavfOCS}>rmJ)xx)lV+lJo7C3L6?hbn-$F*|$F})k|Wu<#{C) zOhh816UAdJn~#H#0rrE{UE-!64%BlRz!N|}@(A`vIA5=YhWlBSeMd z!uvy6dA7RQY7#}_Kgu(a+!JR|Nl-B473#GMeih(v_8wz3ZRg_P<)zy^hVbgG$C9IH;`mJh;Wa)H3cvT6Gcek+F0^tB=#RFS#;XqC zZ{vNp5!oRUUP)jOQXSV;m9HeXiCVuSTS~+hciEm@h12ve8s}|(1j!Y^LjNI3InYMH zgwbR<^gbYq;jiq4FY@Ug05ki^!~Z=Su(JP8iQ@mK%7pWOs!W*wEdzK;Q^!i19l>Yk zJ52FWl-i=3gdu>V&n7=4{*bWxR+ujp39GXYKmPMAr~N{9`PL?FxnoeDX3Hy1OuTTe zo!L#4HHE}70#jDLs}QqXN!pN9Rk?|^87#SZF?qf$B66ohga^Pb0*tl@SP6$r64I1m zk*n&5e2{%lt4frbGsV)6&VkeCL7my#@{W>q?2}|RH56NxAjZrzFo z}5|433#XS@Qi190yW)Tsp>IyZg`zbJiqX7?XS3+&hr~0=0wkhe%^#__2 z_kVoAk=q(VgL0ad&au=pgd2=#>~R)ntYY=rLtuxhS4D9@Q}xNAPm0zpgasLxali&< z&w1nBSMog*G590U|L*&~Mo zDuC*=VQB5naqL>B>~n*d$zcb%Z*V{(SG3h4&QT@B-NgB&*%>ywJ%_i#%&N*b&fFwW*4fqdtM98lzGx>{hwz;Na4x$}g0QD@e{P+$~-E z5r{c~Gg^^$xXsk^dvj>t=wthJ-@JzmVEO?Dbr_;B4 zxitKE96G1UE;(u}CAWBSd^n@>$vHpT!B=;`d7W7@d;wXgnXaWn97@_7x_dcy^zpfM zb>XC3b-rj_>UgS+Tgja-mk&6dMi^LZKjxce*tmdB>%~ikeZPHq!9tTKzjcwK>&|p- ztg20uc^XzV9?cryhuJogB(7IOK=4tc3?rV3~gN8W4RHTb7?uK1P!p7Y-f2Q@rc2Iq{PtRNp0mXMHkYW5{Mm zgn*0|WNEJPTZ@7DV?NN8`ZN|J)j|NDB9xZbYagL+-v%xO!Vr2oH8@X#&5@q*C+q~- z@9uslziLcZajVcxbt~&a#?>QPX?9wCAtx9tU42il{^}T>Hc{46TmdJpSl6{VoHn?2 zVHGF1UWjYE8a)Wi7A4YiLQj7z4(Ah*Gv|U&Rd73lp6Vbcg+o13Q`LAS4-bSsB7U)G z1&EE;(It-1l+=qdMr+D;M;NX40oeLx*r^aBX=OqEdAFZ})%VRXo*wu3#;d6(Lw}6TIVQd~}Kt0ah zf{==7=0x|9-Zx*Sd7_ldX+0oG!PsqM{}|VZcxi6%D?V}lk&5)NXZYSrG9r~*slmVj zo-!fRTI#-}`8%~%K;;3K5|aRp&f$_k&)wAtL(o39EO`|;Inf40%rQ-CHPa}LofkgJ zpwhS;r=KZK+sqd-a{!5|r+~3rgtT&q!`)QL9sCWRKiX3Le|I1@_J4q=nHc_m5q+Hw zz9H%p^>AcIRi2zDVo}8*IvP+=aMuBgwIHHzGj}bx#L0%g5Vda0K1V%;z7_qPImeUQ+OzJea5{+&*QDQV*DgRMA?s7#|2Njz0>VRFy***to| zRe8Ra#fY|JYo;=Ebh-5q7o{G3{|NO>-nI|lP+gMDUQ|AxZPad|r3MxD6W;}rry%7As+Cf?K0zqdc9q4hh- zzjLO5NEQ}wE=Vw(Md;43LB{Y#RG&mGi1ekMq z0L1|)f}vJ3gG}W~Azw*9uhHeo?w*EBxibgM+qKM=_WQhyM-#X+nZ-zz=3zLYpW0SI zH?&kte$@q8I*dYt7m^0@WT*2%hM*`bf7?`xL4^W)IK~?VJ3yvNPiaPfgV9<1pa+oz zu`lrshqPVHHq%;3IZjpaIO`9YTn=g~GqrzY!5*i6i$zAHBSYQX*%Mwy-cnD}kun>d zx`Vz}Ts4>o2V=>`BJ5d5hi`HFwbNE?9d}RDD*cz}q>HN?s$h>!l^97hHr7q#A)l}* z5!@FBs{*;QTCT)YB$%XxK|*5D8J@o!1;CwYJZ!J++v%AG-G{(>DMJU6xXVa7vYQqZ z^qvm@e&zkNd&SC7p|$hjsgB}Ne`om!*SqC+p!4DVI6_A~f0K$L-BVK0It}paqsxVd z&NUOeO&&F<#|gRBw_Pu@573tj^vgZTA6Ry8egCO1Ukh$R^$@(aX9wLKZxG|hA)Rbv z1y*oy;rv%}hlaRAXV=5b>$Ic1r1o!Hwq-)vkN4a$&!4Kkn`3|%-EY*=ZrjJN&RDAb zb;_hPPyHp=ALLO?`vS||{ZEM3`Mm@v8ko(Y1T#T=!Z_BFLJ~_#-&w3CN-FIs1;3iA z>NvL0CcLleXTrr)F3;8@c#wvB^ARv5g?gEDP=^Q>v1xEf1%c~q18aJH?@ZJd+he*l z8AdXfeF9?e7$tCFkjzy+(_ckOC+Fi|R-*vilm-xe_i4NCSq3`*A<||r__n=%(Q3kX z2toz1_J^{kJ}p5o5z;v<&`7LEqOQIZ4v_{95{5A(4@f?d?F~_J@cfBF&7SI`(Tfg%K@6vVllVNsmClQMP-aE{_)EAEGBXA;{BtlzSxzwMSS(0I83Cd z0l1e2Cg>!<2LJBWwih*4hw_B4=8nIy*IzzTy#sdDl{K{rZa!}}HgDVHV_mz?aXn4- zgjWm)DA*y|Ww2QwE0UZmxGx_>j#WQ86{R>p^Q1KE0IS`I4iOL@Y1JAr)1AZ(&4q%% zctYC+2rS!#I0P9LYuuSB#J^_$8~)L^+J5_u=+9?`A>!M|AfhymxQsxA$pMHXba+8i zo;7qiFu8$AK)thB%WQ=+7BO1?Sv#p-S;Zr>s2S!s>z??UY1zS^ogNa++cvlO^04T4 z(R4i;I~Exx)IDw`z}I_A0_clpsG1ItFxjKg#H~U7TM))cSCiqUjXnuLIPENGE%8@% zra>W!bfY5FEKJ*P<=<~y-25s61lqy1lD~7U+SV94K}QfgjjqCN5ZP?@!X5oRn(g+w zuqs!V$tgN0$tJ4St1py!Y>-_t(ejxHQ8Kcl_Z?)jU}#Lid;>!L>L@)qIB~if{0_)n7EhQ0f?v zIh!lv*5^ifQK6=&JsYbQibNqg$G<>Tl3<;w0?X7TR7I%}spHt9xZ$+Q5(;=S+(IZTSL&tu~b&sl$*I+sXzaTo5KO6eKU|4^M!Yh?2Mz zAmt8YTa#iwt??rqJ6J%UynRdW;zu|KM+dbW*9kCtG>hWE#`d*Ioi2S4{%;d!vbAfI z)0&@s;+~j?^YGq{@$jCQn>kYZUh*BJKC51NVg#h8V;|A$k}Ri5JgY1ESV#naH1xh{ zXAYwB>>J!j9XuYIA7Ok;>UT30Cqq%Mz+7@z*;Ck zRU}dAg|Zd~ocfXP@7Z0#Jr zdb&Hez6mWKM5=6;tFc9e$2FL7{LxPT^{-+04gKdW-{d2qcE zt4ryMM4ZOJ*>_u#-R97Cd3-&;Jiwg(uQxgiULM2|8)b>vb*%+caGV`rN}c96hMi3o z$dJ%yo~WJkfm!D|jjW9*stJC`P6PIqLp+nDwaGOa9ZijY=L^sS)UspGv0S-C=P&LLwX=?(&IGO2<;5)vywVOZE z==}Jk@40g^V9t@-=6O>#2^w)2D?-*rCbmJ>K=G%K=X@+L2Nf7+F-VpM2_>4+l_O0R zDHOv%t}jj{83V)hnKB@bwwKi$vsD~$1vA0^lhPksj3h;8caVAry-7LUH!o5OvG$DN%$BL4>Qj_!%>}Vxk zhky-7t`GGmRo+}amLs2~psD{L(dSbW3Sd|LBwPyw_oDi@vC@&HyP!#p42n?9y}b2RUl9UiJFOBCUp8~}b_)#NaLt`0U;MZG5~4K$S5zmsuO-_)1Knlj|= zcKKwXKBwh3LyruqgMj;;0Y7iauIropt)#CD{)h%QDk6bh`|6mr;jf)q9(Gb_>$q(` z$zA!;GtxN-FT8EsSP#R2(^Q|Z16V}H&(gyVoXEczU!61P)& z+Y>5!L-L@z?ZL*xcxY*L649j=sI;^jL+-^1W-TG1gxnrz3yP&3=b)G|!fj_6Y4}&> z$h6?t(hA1#e_D&S$L(h~M!i{T6p&mLKLucuVKQ%R(1q1lj>9KQvcqt>H17A_b*VH| z4KxsK9!;W7&3^?5TkM9{?elWO1H0hDm+hCUcggIR)A&F%p%(?+R+HgwQW>JyJzS5_ zK0?k(uDc2{j$J_94uK>;454LEdKqfm?hs=2H#_6R*jeq}Ups0mfTPv$wylkxMk?WWeShE5Lyg2lJ2U&zE;sAKF2WmMr=H>5# zXfwx#$l`v3)jXLFMY<;o5?rT;45w7mnbeRs| zsIor!C;YMF@^nBDlz+_mKvQa4iyN{@DCZO1wN=5rNCmTSRROSo7URU=KchVFy-q-dkfcfa4F&{S zn0!`j^iE{a%2VWVIns@Gvid6^4IJo$N3mW#TZfDzm&{9z65T6F`Wtgu&( z>ecI&uCCBXRaUs5z#Bv*`Yr1o#Y=U76E;tg@3o>Kx>`TNU8F!t7L1;do1+j?imJGM z7Mp{NZ;mN|YcOMtgad0_qu>JMw<#+kEeaJpH%u-&EJ+nY@b6z73>B(E zmfCL(0a&3uis;x6cX_l`bA^jaBl*a&dQ!)W|wTsh5~(jYMHBzn9O>cs9Q0vc63X zkoLj5J?a}#Lnj#vme>3x`rJZ=j&eVS#BPPovTf1|{+rH46bv)*Lmo>?2C~h-DKT_j z-5};2z{(h5y?DR0PK*Rp(SqM<@lAu+m;$C@Ls_FRn6sh>%j$3rOSP%Ls#)yOM(dyj zClK;ni>1_@M-%ex+aSaxj_ctF*`;Dxp(?9HCPZcF?xRvgkfpvOa&hYm{B{s0nP^w7 zH|$>V+BtX#w9Uw7Uhq9gYMGauPf+d)$c;!i_kXu)c7}g)j$mN^*Ye#h_5Zf&3-w(z z`(coJ_ko48{B({58G6~pqyu2tIX0^V$7k~kza3D)wE|MFtnsiG^!>h}{f&`U0FHLD zEN^Z55@GnBRepx21;>Q!0J0npVi-+b#C((_H6$xkr$id{!>rF`6(2oUpF}Cjvn4Xb z)RwWKJ7rfg1G8!{G64G|2i27mAIu^&{M0DBD25qG1WJ%3GV44{^c<9j{rA8m)X(?e zvLd&`8O0{D!~o}2tt9#=J>umxUnTPr&dIuE4+mvd2ffck^peMjmvV;Q=vI=HSPP4S z`KK38ot9EbOBRX@Se>;iY_Mgf-#qp63`a-Op^(Rl_NJ>apd27pTV+!2sDf2@d^7u{ zmUfLDA{^_VIZK%&L)(@bKXo3fW=Jy^aU*1)2C8nIjFV;>4aSqItfFX~e_7*4^@9Mz z?!cR>hnT3Xx7LYUOw+iUJ*t?G0Pcb{$~+hPV~?O*eWCTzG7K%@a9}6x^WCV-)oMGL z+(7rCB~sa@6H*fNEG4h#y?Rd;@ad?zM7&h@3-$Gt62wC#+z`kYa~<6cQZQHSJJFh* z)?Srp+oV8T?~;;U#V6LW`Se))%J06Ylug<-oTfC(5^lwZv0+3@#W0(de=H|niX~2A zk2dN`Z$}z={Ji%-0pq3qNT6Uj2e3w2SQkg( zXVVMIHHmQ&qR8YKn`64pZ*Vsd4NG-tMV-@#D*0TcP>94D@XQZn%SWOipk2< z_*2yKmr{t6B(@y8`l_Y;TPBm7^MDC1)I1g3*XRnc5DoAkT_j%`@~7W(B~56WXU92N zTxdCXT&Q4Eds~cBfHi}o%{yl3^OpePZH_~2gkl;#L2Nld2J~5t>8w2l`7wqBHEtOdd_ z5C#Lq!k>Gt4)|{#D4sIo3>lHw&hq_!oL@R zdcvi}OhM*M_DQ;WuxFN;Jdyf+M5b^xU6A?Ru1VAK3^Q~2adzo*bjNK#BVA%&_>j)G zu##T307D4-G2$(T;%3V3wE}i^AEl6hma)wORe`R#?|Np0ZgFWASNlJ2Z{;=0x`ZX4 zTxk~JfD3nNH84~#Nk3U>P>`V?2Kib|2;ccN-A||U20X5x`mJuyZa1?7dhQgTeud?r zL0zi_LiCo0Yfu;$*Rw>$&f0!PX8dS6wi`p$*8Zom@=vY+%nbkj2B5KH_k9EKebUQs z9qpYAAHgpOr0ZQ~6OOX!#kwx11rjVV0*t+sylZ%W;*Kn$S!=*0AI*83%}5;Wh{M0` z<|c!>3Zi&6K|wSSd*+V?-~Qmi)!9}+Bq2#42s+~dn1+nfL>S4UK$9`+Te+Dbs_pTbSJ(h?Iwt%~DyxRo$G<`pSX(!OC=9=nn?t&tQQAfh34z z3}0BgQ>Y(`&reL1TDDuC{))gLl-@tb)Q048pxG$I#B)IW)!ClA#C1k+?$ROPmt319wKTuQxly7vFLB$s8?TE1! z-L(mi8H;ZzD&-A`gp8#{x?7a!6-`mMNE$~;y1Y+Vl1LN}qVZrk?@8rx>Q;WFuQ^if)dsbEL_=0OBhV9tP zAS4Mp(TLmQ*DPC_b^LC8E4kSY{rpiw_B==ybWdkp&qIH;mCU=o-u8)~)zgPV0)3YW z2>|UR+oxzOV0P(5rxdI9z$zGmjEdC+>e@Tsuy>f9ClrH%e(|dbzJs1 za5Hd@p`%vNYw~?DSpn-|UggxtQREKt=y>_+ba;HRf+6KzU2>J#Ez}t~Wyw!^^Cwr)^7J8?vcq73Y+*aB9PnLhX72kD^M0B7!*fboTo>V#AV~mL&2d z5ejl%RBOWIn2Lz-9Kb}#7xi<&K2Vs%Fgz9V-)PakFU7&5VPG@Mo$xw562xFrU%{f{ zZ}7z3;O&}M7b&Q~!mFBw0iHmS9(%aBjr9Q3(GOp77o|LHIv~T+({m8Zl>1b{#p-j752#F zE53lJQ;6FprmOTN;J#t*W>QFkGlxFxYj9#LEtDYMTYh58ke2{?G1nW!^Ty6&7uK;s zDVQAje;N|2qcf6=r?Y-xr0Vp;iTJ2=z@pI7)qohU$_Czmp==!|0`D&VSYNq-6OwP~)4?d{K zs1~+&I}+-W1hnn==78TyrlN$=-n*?}C)&^3C=zTPK}LN?Ev*|P^mSjazSbONfM?Yz z5HY5yEZVXwo}uwPkic3++eFj?m9v+sPr>3upFH%Ii;2O_b&Cm_V17ZJwVW zRaSt&*o$juj|0FrNMuFUGy#=fVg+G8pgZdb^lAlYZ_&z6ClsE%lG64$9|UG>n(M^t zScZz3_V%bmbuu{CbitWm5~mO3e7M#x<^7qe+AqJ}Cgd_`l>J~i`dVmXK28g$2%;Uhi0L8dGxXiE!~e)$nt_VmqDHfpP_QA4%m-2-?Io)Nfai%A2zA1^^D_z{q7C`% z+Bm}x_uumGXSt&b5Z!nZFp$hL`~QK^prZi$Dt@3^)He{o`vPq}jW79!GRyc+Knu&i zSMnWcYJHbk6yK-XS*=5G=FTLjUjUjLFu&40N^2?m zoD#O$=s>++n&hXOfz+2$NDXj;@x~{aI$d^XWNB_s+fG}sO{Q*;j368w@{I&vmoWBh zIS^Ev$=GD<4&65g^cuVLY2g<5HX{t;?-hEf?S2l9+cX3PEqgA8VILaXPPl{F z$|5*eVF%r~wr@TemPM?*99JOz;#%Nel(u&ks)HVo+uf7dPh=C`%i9eMIqD_$15J>T z?tfNEu{y?&e-?{|2x~8j>Jwcut6QEl~b7aZRLm0@y#f4v?;RM9w^bFZ5FjgaM zgDvNHs5`_$5^4BE?c+F+5I-VCI>E34qg+w??oa)EW8ufO!sDwNMrKH|usNCERjZ<` zz-ISgj;GiI#bc#cS-$+RkA_&;>-^K!Ovm=LU^dzc}Ukq-ijy6sO z$=!GX96fkOeywgLGLg=zW^=%!+G#0m`d5f?cVyE{>@+gJ=_8eS>2C$(0LT%NX{Ia`9%-kWF<#V5^~wTeIt)`5gl69&5Mzd2~6p#UHrFey!h zV2gJEOg^}#WN4L<-5S(&(aMy{&>qWmt!z%iv;xoIf?g3~&y0X1t_24VsM?)KwECq^ zGy$Ch5zR2$1=XeG1R~*`;O$y7xz03WxjTx$G1_E#KchVwL?MO}4ZoLu=sl4{i}s!z zL_Lr+d;Qk@!|jPACTK;g_mlh-*UC@6Ujn2XrAz2fNrM06RGdl^#;`)~qhASmex`uh zRNU_*h4Oqt)a{L=2c$dbM|`*iIC9feTYtoa3WxDN93Dh`7w`d zB4tVa49^$@Bdj%F*CGU9DIl93tew#;2Fx9A)*Xg>&4Y9yaiP_EEKn#&O@><-M{f}O zT+^YA#=WSF_fQ10*x^6scvrNQz?NYHhDQ{eqV?)pVrtz~;&jx{fNhdsQy)ZK%%8}k zd2GJb!}bmyCQGy8UJK@zOYi48+Si%Ge#RviiPLf!a!eBr<78O@4IYMY`pNV&v9(lg zbhYWEUFSfqRvMk;UoAN*R-2A0?C{qkMH%5jOVX%{o=5WBux(10Qwl-Zq-p%rSwsTERo-7Ilv?ckWI zN@JOkSh34%UU}K)C+1;9x2Hr@EQqD8=1o-*N)LR`=86f%i}sap`~rY##Qyq+Er6Nn zpC-q?JuUwd{Wzs*V|T!U@VTXzV3(Dmp0}-sknP-yyN4jLks|M3(ZzBpX5C0CNl8BF zXEyBGaBkB~uid;SjP14OJ{&i4?|xCdY9iKXCr_cM9{8nzm*C^#dAA3voIxz-l#`=t ztSvtic5v1#h4|V&x2fI>t>Dc#+aBb9@kS0MYOiund_834wxtaZ(E}BO$ z#uOT?b*%eOg(a{$uQgLoj#CzW;fv>L^Pz{gqD$q9yJ~1)*wsA;7)VXqq|ojrZd3-) z5b(*hU1Wjvy77xwGn6Dw(jV}HD;P>)8ukp=RP!!={^1M*-=c-!eibt2WQ@{pPnqc& z6;Yo=?QI7Z&k0?y5JI0@ec^ptAo47hS90hcNm|c_8t|VsMQBs-=*}w$;OA$t0cY zJKs%b$7JYMAAVVsZz#qW!p)a=w}LjPA_ZEdi4W#PkCLcgu}n^mDnq%MnK~F|l-{4# za-)HviBI5?50qR~bs4q0fMbfQe#DyG@b^zc?u&UGzQen@N;$!o-5@_dJ>Q30f?y>W zkmw`nWR^5`HIq%yvFjFMTNy$D$s^dEkA;tPMQzA2g#tuk&o+|iD9Hy$VT}FqJx}HW z_V}Q0k zaeC2ZEQ1ou>?gCXwPQyKbf(9ub5mkmso4z7(MN~EIz|*7VZsLWO7}SRdKw!)aH*fD zD-GxojJ~*gpd)YJuWe>cU+5#}qC7db6O8IRHeY(LK)T?ZjhXTAO`vsUezsM(x_OKzyX-KBl;tBBtMaUl=mMQEW0`;cuK zZ%CoeV;#}ZfP3c9tK(6i>EaZq7YE`BwaXW)lZtW`d2yyf@kSW#sE?~wydaEVg%>NI zfW)%au}V5K4QiC)K)cM;>-xqUfif$rhu}nY>sjoG`cEVVK$7~n zl0>5;l7aclGC;xlbwrDJ2*8r=TAJQ>$s{+TLP#q>5`srlvY3{+)ODM9YC9c@H9IIv zwcZSE_50ep3lw80^^?UGzb}I98X&)xjkNng6^G@L-zCO+O(vP`BaG_^VpHBEro&Yn zgQevD;NXX6JCL3%SWG8hS?{Xi^`qA(oSIZ5{cwxsQ?@ zZH9*h^KLt1{wnaSO@D74O9% zA^0t-<5gI!y3Cy05cWdPB6~*A6wIER=|vX;OXQd9L{WNOxa9bAya(BhH=9>jeeDw4Mlk+zBkHl30F&miQ=53?g5ZZ4<5x*_ zO7&A8ff{7~iZ&HHMFr5*31i~{X<_rdh#7$oLu}4h^-H;?*0GcG8#oKa{=uYYK7FtD zzB%~RHOHez`-MYu^?sL7eLlAa+DqMk4z@yX_9!hoFJ7jI=m5&i>AhfI?KMCLf zh_ka*am1;GAy-CpNS( zyX|>{Ic;!GHn>o4ngOX9}caYRD8QHLG7Cp4w zh^Knn`RsA?`9Vu8J@fa@#}MvSL6OANSUtT3GyTce_{c$o_*cLN{ta(IE^aZy=ifI6 z;qMO9U@R=8uQ|0DL@>aTS~$78aN}QIa*u{0VX&BbWRo08+K7vC%SWg=wljc}P4l5b zO^g)xDM3V^cjG$2!~zDmuTqzh?zuy=;`)cs?hiHjVi=b`xai4G@zRD(|JQ=Xp zb7{P6mVw<%zPz*p3JeHU8felGi|Z*#<$1XIFSf&6Wm+Z zS|2O~g$q#f8yyo=t_F4Yig!$d>6P+WY|JJ*i!e=%l>%uCPPO4OY zXZjqC0)gDsdg_2pC571!ceRp5c0Ka_=SdJ4&<9AIo*4k{Ol3E2)MQd;`bssWH+clH zAi8fjlq{NtIr|PzidNXak7fWR?SW|^FgOqISuACqR(1Q8(=xptxCX!fd zo#}m0j_B`W{qwc>=1%YPqJyTDCPS#L-{v>M=rUEa`3%zGMbQyPXfpmPs4{b|qU!2` zYaq3jeOeJ}05Q;FctP%v!eV7LC!yvdq?{_E#f{zv-a8c_T6%Lz*bx>wKVah$Rc&k2 z&m?|0%>KqY2R2zWDK1hkEOOr=F1znd>DaubwpXX?9 zf~2)!k-O;QAQL(=LN9djXT_TM=49sU9S92v4*bA>ACICHG& zDVLH8clL`Wg{g#b2_1%!0E0S*HR(taj&t>ASXW9qr-~I(eJKkyi5k&PA~4+LX9cQY z=JJa}mW##mg-I#oK<+xVE@{hzfGU2 z#HwxAyuQ2Ba7X)T;QvciW25^)T`IQaAjJ=N=SU$mO_!%T_gR9cNEuupV8>Y=6Nfu)>RU|4t{Kj|_#!Tk@- zP}EojJO_3Q+z3Y=Y911A|GR}=NtGkHTL?sw05q`v>!t_}8NtljxDH(9Jv!7SBx&=! zO5!+)dxXQwJI4?g^4?vMV=qvNQLaQ;4`-@ zTb|QdSq*sRm+x(U(jXfTP=q(c;-cbYDz3*`$zqe5SM7}Xqs%hDY=dATi(VH@rgEow z4-X^kh#&kP#4p#0V~}K_^f3U_mFgwqK(zGb+qJO!%n5W44Zj(sd*67tlyH57hstm} z`BOQLn-|r4pI#m(@)ZKav$#;Use^Z~wGCrm$2w69&R23_ykymTW2Ct=(Nob>lq-kw ziznv2W_;TZ0;S=k^$rVHXh5pf89aK^0a3*xw$J7QlXs^we}jQYN5UVS9C`)wYgyQ_}?E3}VQHH@VvjHWg8=AnQSe$&ZfJ!b`c97@!K= z&q2^#37r09U!V;;3;_SM>HkyA%l^%b`PX;+_3uspFJ$zFc0OpyE2HaM+o?Gy3e+Tl zjOrr+6I4Q(Tzq`cVC>^b8>1}lW>5q3_~$TdMu`O>HYXY^e&W{Ri|cd{H^(WG(L*jL%G z4VWX7^mJJ)G%`=~J& z{vX($sate+sW)w;*;(V3n3`GAO{_3f>$e~Ii}?ggbhx^uAv2y#Krv=bF{ewrJf>H> z&Dz0xG}=5sh9?{eU#S?E&TcIfjoVLq~97O9Hh(g(QDKG7kD^gvo z3i7AXNLA=&af$mHG)yP;Em419B8U?sHRvw#e?5M~^~a z$)y<2GS@C1WembwL8lV}A>j>~z5WN(-ZzK#vkjs;))_Zk&iA%ilyVKtv>>BAylS}|p@La+}1(T*v%mLq5inRLgAsSQNzs`25J z)pLg^t-mifZ`ohnlay84Ih>h&JZ8M;HsXLhT**N}Jin&?U8d>@!*%Dyk)#_?!7yb% zec+1K8SyQY(bYz2%|b`Fy;!5ueH^jIf)&56fKGqNa!+VCNTTG5wed&;gPdGBKJ@9D z;oEO7qnOBn&hgjGlyS#*N&&Lcz6kBF~I2zyX%_4MoARlN<;;i0Ywq&k68Wo|f9{2NF*ZpPh2L$;-3Fkoe_OXJ7| zn;xn7&4GDyJh5{Uv1-}*M<62MGm*F@ZzYRik97kvhifo-L*d-WOzcU7x-It9o{GBb-z5%fZ;RKaGWTR~j|+J4j%vr_;TM#n)$1Fs7By z(%DPup-F%f_BH)X+4t&4C0OdA$g(uT(nSW6#fK=5*}s6wcKaH_pFbke2nKKnjX8i2 zYZ8wgDDh%v9d)Y0T&x4ZY`V8rA>%f-X674UlWsV5I#EaUlVp*jJ#SPiTNUbm69AGn?oCQUs|d!3A} zVaBql5Y|M|&afqQVVL`bX2w1Th10CG$<>c}NU=JdjLLnrqe;XpV{iZxG8#r7NJTJ# z^h=c^s}4Vy{%nT`+TZAW%mEI{e|n&thBt)sPN6+1#$ip|f^+5XKei2@{4okpYad#F z7}`HF7>7#&#&3uq+F)_)lYM_^aJQw(zlp=Fg#fAG6NXr^5G>iN!~D3@94ij|8|uJt z$MqI=({8`TS3p3XgYo!@Fva{cg1n{W?K|Gy67eck>VNQ9mM0nkkZcH_P-E*yEX~G< z(c0WPS+AYMn30*k(|@iVEk$CXoJr9pAufN8X!7ych7p%M?65e;SnHwM_WDgk5dKr& z?|H!9qExqjx=d)lp=grhye{$T`EtiNf8zv(&p4_jMn zClQg90#SK1S!1|kY`S5B5{?C$Y{^{5%XNeKdZ&fB(XcvCrI^alw}j$g@eq|b#|u<2 z8DV8`Yq7~9D@y~No(w&Yev%_rVvs^qCKDEGBeOrQwwEgPz|VmhQ))_2uP%Fx3yVhG=G{#Kr?|dDBdWryK8bdqCoCA`l&slMe+>* zqNBfWknM5c^Bp=~bUcKi#C8*)*|Do)rTE5vG1*}~E3@7!!`wLuY|c#f9IUPxf%5z5 zmYSR!oq+VzM4|~*Or0kgo@LZmxV+N=Am&Y~VoqM;;XGVxCr|3oKQ3^)HHU&$)u!Yj z3&FaMRybOs-$VTN08TjM7Cj~N7{u7w*_~YTJ_{8($oh3;;gOUF5I!XnPSdhVY4O87 z3aIUMK>E)Ol?|2|0(?Lxuesg6(F{xI)>+ml>(<2$6k^?NDAsmOLYhOqXRo`^^**0~ZLv>9!eHC!$&%Hl9#V=@4v3S#i6XKX}kE zhg#Zt=N`)9V~bdkQP>Ow{I%m~XI*} zxl7s7O2KNA93NP4o&u&(L{U~;2`G|9fc92|Zucgj630ujM+T_r*FRnK!=Je5CkL{8 z5f}$|1k;7f@@PUo>*o=}M=kTGgBmUY^z?CZ!7rSWjp||Z>lGm3ijjlJmBRb;;$;U3 z2*RKU3lLXD;(Y*^{4+Szk1jhi+n;n){Tyj$?n@#F;T@Rm!RA1c6P14px59hsK>0L( zIl6zbibX&-0e+Nf5=0)heIiSNJ?jbWMdc?GreIMLPCx0vU-MJ!8`l|1fr645A5-m5 zMTML<>mENp+-_+$Ql~WHCyt{?_^=YP0rNwKY^kC1fMjdhzwbymi- zEe^khvmJ%~Voa5gw4(bWG>Ar~rr`E9^U;`$p*bQSHzYdnBaeEtXh;|GP|f@d7LsG( zX@%fbAVZEH(wr}B;CSyDH7vj&3bMc|AP|^V9)gda&1El&k59JlF*>=y9q9U#Jbo|s zTnNhfUIhm51Fg&b)hUy*hiVQ-5ZuSABPPv%vl0 zu+I0U7QpcyRsZOvQI?;sd7EU?tBtGk6bvi3ID`4-<+;o*T2xy~B)N{f=+|?k!3u14 ztMfZ#7rO)j;V0-OR)qaOT;JIKry=(L^0rx6{`KaxsiE_?rQ`FrrE>w!{86Ir4BB3U zsreH))l=REks=ZYTDeFjG3jXg`flQvA*Blz^~qCwc%sDCgwr)IPqKqE=I+TeSW=emdS3t%EHWPc*R*`sw{J%UAOH~k;#Gg}(>-9IWJ$>;^DXQ#rcD)t;uIb!DzTDW1bEZH^4i$1neQ!>(o{23M zIV~DFYQRu=ZiquJ~K`>DItMesq6P!4Lb?y*?~e zk>1ADCY6kJuD5t}+~ov?xsuZJ+>vcOnjB!2a&sU9hO(F6Ipln+5u5{EXViuh$ar7` zIy^{GBFiI5(j*e!HHw?oj8T`73?zExbX~HOV208MLI}~6&2DudJ$j(?PlbZiu7Aqi z6^&+fc3$W&L^zHrcp>W_2pyn1c)+mi~_EOmQ5;X8NWKCCQ zAE(W%LwZ2VlM^>w}MVP<4xBXwA&-7Ys=Xdq;!_i+Han&`JiyXYwSe zCZUY;vQJcVR1(27{)nD;=8w?kGcM`%-YTG;@^Ln5-dbGPOF0D`q)K6qDGZX_RGrcV z;$sD*6FcZtr6d?I~cyfCDN2Xtvlpx=xVK9 zuLi*0cW0rwP6%KTu_2*C1(z(qht_MC6;yr%xbt+j*Inv~g_en5>lX$2dc;7?H*ykU zfYTDI61bBU)6+0V_mc#681$IHhIgF1(%ZB^7#<6oSe+Z{fIK!zMfNW~P_^B{BljGd zU5-CrTbg?%)igX@#~6>MJqK@__$H-jK}~eQDbeZxPo>y69K)8-I&TZ(H13@XlZCpO<`^^C$!J4mf;?3(2ucEQ zQ7<#){0?Xg;{YDloZ|U08T^c~g1F>e4K#z2u;vu@?X@y>wNFoO0kN`D!-A>lpzMuu72Q zIPh^W(zi&NVX>(3BJv3 z^ZW}`qd73ojef}FgRBrkc=BlDeR4KjuXbG=DiN(X7PbZRB>O7DL}HT6KCGlfgnM-X zZG3^27nRrl?qJjo>o2b9TMGUc*Hk&T@r`TJw%0Nz zB=L~2`iP%U5(;8}0XpruW*?E;d(0h_S{j0e7O%Xwc(6FiN^qX!NikkZv}dv@*I-H$ z!S(ARG3`%EY~9yLT70n^`$blf-B}2KjkVs7Gk{&?A>Sp%)WrQ=&J+n@s54Md6b+g? z!Bt?9&@W_NL4IJ7nWh!9ATrU#pirDN=pwNs^^XO^P!Bs?62xQ?z#Qny;+oV-Q<08Q zj08*7?^Pw5-1=T1>Y~8}#-s&}8WxmLEl?2ZCDB)on%R09u(>`XqlD z{Tj?{Rnb5wv#+lU0z)hz;7CHr4I*we6cVRb>vP=otg-h;#+n2~W9gszIiUndH^-pC zF2)070%3tUZ z>ablf8LcvWH-VuB2{M>eK11PcZ%4o0J24jKNXj!cmHz7kI@&2{x#LiMYi#KKc_a!P zz8jQvs?P=3vz3qYulL&nqXF>RVwTWwIFAO0$QEWT%?|+y@DDWx#>64UiWVQQPLD@7 zm%O;e>%*9VX1BTzk9=OK=k0YEs&40-*DrOx;ik%@d*&)-qZh+hYnSG34xdJ@EF|x5 z$N1yZW~KOf+$qJ;LQR{{wk$=9Z}h5ePCv-FbXPDx52wb!-keHspb|>{#Bp%zm~lUS z>I}VZp8S`epWEGx;j6jNo2v`gl*Gt{URn<=K7L4sBM#2CzQaW};mPRS#VnR1aiv)3 zlJ#CMZ#K^x53Qd@k2-nqeraRW^6kKj+j-IlgL27})60b%W}8{ei#DPqEpa%oH{K>A zeo7`ciAXM{WD!-HV4+M#<@DVvfU5E4PXwajnmdg_2(od3D~0{kmD>H9!5Rgx5Vo+o zUx$&MxP6g=zHGySQX@_fP!6WxnpOD$)@_qgZ69ok+v z=yZ8cJ-@*zHQv&kjYB@$;+Dd?%^vfw4SdWmGsA6=Zq=*?!JeqDyUZ?`LP5>Ky+I;@ zWrhtLV6;e+RuNLWOo{LZh@gvN40<$)P3zorh<)p5-1Dm&X5XKaLFv64X&zkDOm=ES z@X%wl*!#R71GZrVH#l6O1UHhNm_XRH&DiSIB#AkS8oyoM*($?zt(!*$MmYATqYjXG z{f0plTcLFoI|?Ip^So~O`x6jYHCw_fYY1i=SfO>=2rY~>`D?6c@A9l`Tp&Y_o-HcG z>k}%4Y|aPUy*^U75_9JWDmsqWHZa)SJ*Nn0$6Yvi%As}PiW#e}$92&%wN4c|eLs*c z=8SM4GKATVbR+f8((yINsGPqd23)8eS})Q$eqEdFF~nReVz1bd&%h*0I)IiCTH7Ss z$hA7HDAheN!jVu+O?FVpBx>t?UWwQWtvjyYs$k)BJ}cTP4WB)@Y|tuY1t8T_^&6Q= zvP8WiJk^{pgeLo{^R9PvUbIh4_+H&H`8sS5ZWa8rp`fd8+vtqm_R3dShx#?{7P59= zT9)$6^t-|+WRL5r*=qp@?YX4wy30u&82pwI?gvR)oAM0I4^(o|8e#Rw>jkIM9!{Fh zEwgU<8H4A;0}~tRT~ltVjfbfIFW?sv6y*QC*t2u|6StR{;a{`&F4h0<4CM{l83Be} zJl-<11(I8)1(&jx4Sej#fI|EbW`v4FncSxjI=obY2(@F0Bm89_83bKj$F^aQ4um*7 zVyrKg{(pM-t!7svw>uY+;S{3fMNC-o#D9DEqEZgYb>=(~w)@)?{TQ3+yWxyz@|A?D z4!oV%J^USp##aA<_e*V53>%ASmG^br?%elI?}v*-D-9N@ev^?blIg)(+&D6ON1pXj zrISwPBIt-hA*A(L;%vcsJhZsq{-XQm>s=BK8w(yhZwXQQ?=PUNSFAY;lnBe+Sqvff zgx+NJhyx+;V!s>Icr%e;@$ppM4tV_v!**&erjZp*-zHezdj8KyP-5t3yF-h;GjuM6|5rfr$6U7Uajf5Yy*atcn{!nyGAt-Q!?MoWK z3LFr9a$?yzH+w0-nL~!0%g{QR7aX%&D$wT)C+w@GXtk<^)j5Dc1uX5krfq!vy_Nj} zy#k*Uhqcv)$O;QqD-}#DidKyk(!94w$i20^)V6!XWE(7ie=NzNUMp$&^MM?AbQbERsl;3?C~75lBT{9-UXd^MUw%c)JmS3rX06ha6Qx+QSVcL zA`AdE&FBl|2UF>DM+Qr{Ldq0d%Ifo^_|u##sgH1tDFkvtl!W(zm);#C!QJzPMh8e( zEj?DyEK_#5FlfGg!*-C~?xi|N$iaE`C_$IUoOss0Uxr;?8v9l}L*g&25+MuhJq40- z?A&0@ik9Y_y{^e~-$C;?apk&tsYEsc@B0QE`EVeqG`E_CC(Pjuteqel6gRff6>hGs zFISEP)gLP-%(=02nxVt(SGLVuSE@O;J@G)Q*twcJ#~)PEAf%@d>0|<)PjP_I@ghmK7MtAue`_r_~51T6f01#7U7G__t<`spLJ$Rh9O~lG8 zBZPkUBxRF;-YDC5iPaALtwoT&cGJDP8)!&Wv}OM^)fe@M^Ma()?~a$32I5(Q2V^HU zO%!h~p(>jLn=B`hw<}0tCIbBC&rg*iF^Gy?lPsI&;|IA_XsrNOIOx_Wcd`8lM)gt_ zjM}s0l~_yqt~6UnF_>`-MWE9F4Yv^NkRl4%w}$KVUww>JWxv?%8}#qh<_kJiQ#RGj z`UdUhcwPVl``X~2qwKARJ{OeY3H~`gFX>YcTgud)@-Sg;AD^tu?P~KEv0m2owYqm< zp3g#~QJl?QKrhpj0dhSpe*wnQ1G%-mA9GbY#$H?Dg`s`bO|O;iB3wAdL1+n*b~}@s zD23^Vh|Pn5%OxUh3)|mJBRzvqFEm}!HnNb82PrSmpjr*zj_e)_t04ZC&)z!~&` z=I-vBp19U~dO7-0*aPwjL;eTC?lTF!R)ye$r`xaLR1!kTX5qb7rvn8=n6SIn7x&ZS zx;5_uJn52sZYWf4#K4j(}T$}8i|K!?a{rAt{n;H|}r9qU< zbLv*+UkriI#7U-Pvima3vZcQkRTFP#S!^7r5}+hk$F`sM1T}wCI}({D(pmcxgnK#o zd(puK7p_By*NS66Y6X2MY|lTP8$TRGhmU?cQliP&5f5<~hlq+f=4mpu#jp4LB0DV_ z+A;H(hWD}@zg3$t{4!fSoJPinT7n3qAknSgjuZ=~b*l$UrZ4Xn?L<%UrQQH)& zj61GmN;+VlUDx+sGa{y?anh_E7FP>nL+bs}K+E4hy?+8G+K|#AYhD|N z1a?l|6*drq>96zaMrv%LsktYkhlU@5vOXuc6u3Fl2Wc@NjuDiy0SRWRfDT8iWh1#* zUJ<;eItIiJuK>6H?~a^EM^36m=Az5Y0xK2*0&Q}0zIQI`L`AE#>BOXyfQOMZ-VBm{ zNDKmbC}DZFBU6gaIF*7I!Ij#7; zyN!%DUF+NnWmnc#<}e&VeY7udgbcG%g9Wtb12ACNxRsQe71ij?rl3Hp5q|@F@mlfG zH>k2zSl@13&KW@JFvWmy@F3u16Vb+m?Jt&s2LCWT#%CzU5$OJ$aPzl_(Qt4c2f$h} zn(jgW9;q8C4c5o`N@(3rR6(!^9fr>awP6DL;m<+hz(?k=Ua|MiIN-2XFdO@gMuIf@ zN?o)_q1QZ9hekQU0dUJ9UqJA*lSU6;p3pEaD;={wg4EC42pJwkzpu&&{ruyU>m^aD z@n)yH0agL=u-%kud*4w7!OI=%r1NdQCi&%u{l z?fQX;`^kKA*P=mv)-n0S9+j=|mA{KUH?FY|#02n@#nx360o_vb1X1}p4M|lPrK@eb z@bUse+c|hXt6BuWKn@G%4!|Hm1k#po9rry$wIF@@h;eR?84Flq_>H~qpDuse)`;&X z6yEHKRM9!m;$|a#I1uXaSmB9Dw=n}tX9*_&6 z5XVCMVNht(&d3+#qZQD32TsT>Sr7s_L;VY~xdBZkbbumz+khTmB!q+>S|llA1x6k= zw(0W)@`Xo;(@WxUP;?tNkrllj5Qv}jJz&@|NG0qS+=y@Arsx7>g_Eg_W_MQ$=pceWBMI~ zUW_ufkHB`qB)+0>MP@D8DQnZ6QcG&ed)+g*oV`G--t0VOa9yS83!|m%6aA{y9BO{) zg*b|}<7NzNayDc^U}b)i#LAM*Ny=C`@aEARIu5Mm_2V(f*361_RjrXV+6zNVx+HFB zNrdYn)Xb`7`&OYve-MCv$EHQ!%vaD4pq&hAT2dV*#GeUbe?;3G7dr#^s$ISH{H=2Q z>dsN)T{*BVmDRt+@3?< zRl@*DzLPh<#TFeR;tSwb80zGIpWr#ZgO~sPe9Xe~uUplZ8nSsRi(oGd23&TP8&v%So%yJi9G#3XDzi9<1!WI3F zFCHJC2hjKR~GZ^MooVChLmHj=!PxL|xorgVbci z`*Lu(;4z430+(o7F+O&^ZC3wd#GF|6$d+l`SRHy-xLHnOzS;F1NBo=62O&lw{7vXn z7bP< z8fdqU+_$XL&&^k*KO_r0M_iF$9Sl<86>6Mv{$O|f~K;8^r$ zfzP^XLWU4k0F99rb!@Zy0`%ZHg`EYo)0@5pEvPa&dR;05(G7>^63#0!eoi1hN&p8E~caX zg7skQWD?v6om?1wa@HtfJc)4=8?t*VZQP*h`9ipp1VAr&TXw1geXlk=T5mQQG8?)& z7{k;H>s9JM*1ZyuB2ns_r*`X(FA5~Y+ou>Wol+rI;M#FRMK`N+38v{s#&~3)&eb!> zT%6P)KAK0*S)R53SS|-pQxqg{g)YcIh@@C^qMFs-nblFDGd$ zk?4E&5ZQ69s1gpjF#lu&XetefpHRbP9-tiMw8G=@F*gl*vIRnm=R{nX5$Fw+5<$6) zlEJVRC(Zg`7wzL?V|aZm`D~V09!WlOv}|lN(;dQMl6?jRHIQII-S4P{UQuZ-yK{eu z9BcMF!7PYHg43VdNc)~H@6Q(?zzFMMZ(=c2V%?Z23Z{xNP%aMOWd;m64TrxvZVDWC zQN&kijm=WJ5;kyKeRN#b9c+^S|jmIz1`rX&J-Q7f^ z@51dv^Jcb;J;0e@DZ}qny=`Jrx8nBBesvdLbsLK<3GLdMEjdIOis3OYKhr%{NmbqV zp2EYqx`0-`z^?va0sh0X&-f2WYeqIU#($f_cd1J!Er|WKF3!Tf?yP#mi6B-$)Rh-S zssPD30$55@$JwAZ8y7JKf9saMnbuE$eK@YHcrhg%J*S`TUiM9~_74-^ouSwr{%G zRxS!{sKty$H&@c>($Vqhu6W=igeyj-HvxTDhGOnEht{7tH2WvE1*lWW=FD20(HTY5 zfeLLNj`rkh&n5l?v=(c>YVcN0)}`x)4!P;<1j2ozJyxM2L5(}25!9CGIb{|>K>Yhu zHsbgDO<55aOF+2dC8iN6^gDGcV^&rvPJ#8Bp|qwB-rfzdy=z}-sf`l|8v@Zk7Tho_ zme{<(-h#?>A+neBs=~ zcYAKozG!ew#+_7+1R!GFfceo#9MdUEjMGO{65qe8qI+HiIDuin%Y|Ku}6DFn=6F4Sn;oLQT7e?W(iot=e{zb4mQ>DKjuoh@R$W*~} zqG;t*Cf)Two$9Z0j%B-tOSS>RAd8xtWsisK4vyZa1^Z-B7uPGO!3SeNiYTdq9d^x- zicE$WSSPbCieWI<>uU@}eM1>S0Wtv5Fho<#SSM7SHL%1pSQ)i+)Jw|qX&p1w|G;OJ ziPkt1vKs9V$-n~_V6$4JEAD&qMiLzX(1(lM#d*+Xn~6w{^9_}d0vx;npV@lSCgH|5g2|<3fg1qvMBs8ikQayjnr|H1Ja~GZP zAhtIM`E;K(xf0rQjdGXjbG~Cmd+da|!1=r|fbs25$d>vJZgzMH#->|3!0^jmny{{X zChl3Fn>wgDFsu3_wCr^~)bVDH0wYt)E*Z9s54oakU<7$0&(DDxHXeWBu5&=>{kbw+ zi#?KGhyPA)^vqm2PyM7J*$Ldyx72nB?p(M*OTO!5aj0q8`z}v?c_t;dmoTF1(5)aQL zSwf$J?cKro$t6d}hSV;NBqHHy&_c97QSy`b)i?;jxyqp5x+d*9UelLG^@r27RI37P zwgLw!Wnz3x6;?Ef+v2>yog~+^p?0b5mj0sQ7!}2<_?Fsw5K-yFB}N(ISurrAaBO#g@WX5k&b?qr0qHh zoX1Ck%R3cw9GUAe5Jfe$UG7$km)f$d7=$tgV#bF*kbl4yz=4N(*;>3 zf81uiNg4Ukgzj^6;~LPO>&@@iO%KVeIgphdYj^+mX4%^bzh?wmx)M*BkDW33Pt1y! zIh>PE0thlq>S(1Ju&G9vDW_$+N;-{|EBdhJC$b5C8Rzf}Kbl{cncniC_~~5KSwu}j zuBvS?uqH>{A+9aNwKeF++gnll-CJY>p4iW{oUT7!6fyjXJat%Rf4p^r!Dl@T&u}OO znw>aFY#4Xc{UUEKuK5#Xb8E14C)|Rkh1lFr|8wFY$Kz7-ewH+`CgrTDzgZs6t0qdG ziz1%W;ylQvKMSpe5GCk6!2YyXd}L2Ec6LSZ^X^&L8o)*J1h za3yhiEbg94EV-o6_o=A7rHfQ<+DCDp$yBFmxt;G)M`H$PhviALf+{O%y=;0tGoJ9i z-%|${PSH0Dx}bz70yOdScG#Uofv#Z_xA`74{#aHtcY6+ zaBXNkJaj|Kt?*g^Ij=jy`S}gANPEf!kxm2Kw@@<1xi;;LcvJS#eBx;w)Kt7kI`024 z_Kv}oHr%#$Y}>Zg$%<`u(y?vZX2%`dwr$%sIvsRu^;!Mw{ngp0_ETTI`Lpsbm8wT!ZZKIj_{w{4>!Z`ePo5MWC~F!Pe9y503kmr^D|#XKFh4vD))A^^eO4WU+2K zcWHCv;+R>izZjdc`2(?4=FbN*k{jP2i;Yh3?131VAI^Y0J?gaPeom!-pv_?jrs z-be6Gb7Yqn3UCu4i_fD`qaDY8L;Lf_1QU-zIiW7M`a4)2WvKqS?v2rnlwb;+;N2}G zp^owy`8cN|ms)bPR1D&8Ljy}Y9L-4tEf&pif?2-_R#v#bxuqtRI5!^q$Ux;oLHZ4@2fC8++RgqHax1VEi8~S`xMn;@;MYgfWvgD z{lH^zc;RyhZRC%P42Z;^6SO%1&_>PNx|^61;0~N4S@?&Ch-6d<;l&hfZ4;Y*YZL_5 z8yM2_@-Cq&06XoGi?AYs@Ae79Km{#Yo}AjZnP1;82;OP+gD$ zn!R8*e*d{ZvhN-cxSBO_$AbqdXRYKzR4R4<^5YtG&YRj&G}2~Fj5;~|i#PP+`MieG zeuWOJp4j?Us-RJzpb;4pvx-6Fq^x!r&w=+x`;5=vjr4Y4gq0*Sx%LI#neMDM==nBb zNx;mQQko-}38__g>>ULiU2`M6?ea{IW^*H+`D9++@(&L{p}aU$3t#u?xleZO$xDqU zG6>eNL5UMh9gU<=RoqgoNA~mro36QnZObYYl zVPNn%IE`1-b*I8$nL82&v-?bt=u*-G7(oPs4zKlRRC*a5sJ4T#fprC(ulu4_o4uDz zq;8@c2(EdU8e~RO#?A6QEVhSu2b|nX(ka%#Wf;4)b~lG(j6JO#4@Tg63kDx`I5u20 z0yy1Hq+h4Co+4@?C4x8;E{H9&K{WK+OXF@ymA2*7IqMG&SD5FWeqeaB(jxD2n#arl zJ`7pyXJ{^`FH!2>=6i^wrW|0*5WX%uHFtbr6-}5g!GClo*&}elRH)b-llQ+qSgu$g z58PjNJffvwfy3QMCb2S$#W){gXXsB2q!&l1bhl{GYI}X|9-Onjv79v{q+MO5>)|bz=g$%0*>{p z{HAIG#LJHND&z*6k+O%@zUD{D0mIg#r!wsxu&82v*!l|w)>=k>T-A7yYjY2YY>z z+S*%Se zNDG7PlRxVJAe&h{f4vJl7g5#6RvU@XCZpaILwbOZpTRsVIf5rKV}tHX+-gTAs7Z9H zud(q_Ys=tpR=jeM(h#E;Y%(rQH)cd*T2w5|Ajo)JQ!upeUqE$fhScE0uvQey;GL47 zBM@1;7|klxM`ITHHqE(P74RN~*J_*dTW3T(mRNglJDGiRMLZC~UdP5=v4c|>LKMSD zOoo;$iGQxpg^F^(3=0DR(l7Bf+F&&OcLxcWu+-oH;s`@jGhVu07*Fy#9b z&&anaUAePy3JQ@C2yBTHzutKYvdBv`iZCQI#7_=?k$v*cR!pQU8;s$6uRQ^;I52YX z{JcC$N=ODalgq%kD6i607B$o?&2Qcn&Pp;7|Cbq87aGjas=&p~#WAvw_5B%1VmLas zXGPrn?-eP&WInvG_g#bcgOx76uZVp`GjYeH{R(?GTtrGy!4P4RD*T_ZFYK>O+TZ&a zSRjC4wCKpu3*G@`5)Z8}hU?hAVIg?AZ{)BR9EeXa*`+eI9NiDE>VOTkufn$ar5DN# z*o%@r3T=!*MF%Bp&GXkNDrcOWxnCWb0I-E{Vb1-8`wPuW;J}k^?-7_NbMtLWfEiSF zQ!8T!jK`1gC2El%1y^~$^Fu?~ij3hHHQ_F=lg&2zGz5i>R%q(x+6yw<5yAbX@N zZwc!%oYy8DI`*W+K#3aEG5U-&Gha?>{pvF>9e3f8fuc}=7De;lK>Wc5gZ_w-mC^;_ z7B1L2K%ZMTlgZznJTmZbbepLLeglWETieo2zP(h?;;Lb10~SMYbj80`3neNXI(uv6 z_2cLViT@Co|B#rDuBicKO-&YpC&kjMb53~BAeTHO*%@ZHOxBv}Quu;5=w=6xTp%~O zui*$R4*dKz52KCpN|Q6X?!t^O_XhU}H!h4;DMep8gO%~#(foGHMC-7Ra#f`(vcXpb zE4nwZ?@kb5u8MxecRpFF>wHg5n)z!y`EGT#_h>eQ2n1-q;e`-rQ{Eb4h;TOl%HlS< z#(>ajl#k%H1n((lN1PqA;Z_KT6x#}RP!#FlQjd#q=jl&f>(|o>zsA#n{4Fk}ATmoi zeIel})=g|0KPe&Bz@#Hz&|y}N(kDn6f(%gd4MJY8fvAo}VEX!<}j?!Zxx1~KqdXh%^V40?hl%@Rm>Q9(972?Q{+MvL9H6;G#lAYRxa z_{G-4K*jF5gtJx52PhPhh6mRK$bX}zNQ<%6GwqYUJoIBAYG*mqh0)`uQ(lI^ROw9# zl^3;{-~ThoSDOc~e-K3EEv)m3M#?jCa2IHHvt4c9YP%ACsMef@w+0)P;!@ixc7Z`~ zBCnF?BwDe#>=-fj!2((GSyyZupqSqBGc!EHZR`?B#R=eS{Q|bnRf0fP!0bHEp*@m0 zdj@c>bI0C)_S;&A)MuJLK0mu$VVcer-7dDrlX(0kl2#Ov*fVo2H?eWOoYwW>2JfSo zWe05_!qJoB??YSFQqYG8ydM)-d03KVkT;Wea(jXWD1layIZZy{N4RX}BK1|~?KhVV~DPLV!;z-4j72K$< z77V3)87PF&;UTr(gk9&U12ke0G#^%zO=EWWi%)Z|Zq@l7p6Ie__C}5C3s}`;&EUVGREm*&xo6X zmz_b>-II9vA6I;FzxZ9|fDnE?_mkoc__a&yXdO3#N~yPTsLY2cI@7^|riRinsZ3E4 zzF9$G@|`IWC;LVc?JCwJ@$H(rBTbt9@TzZii>SvP`0ZXkGdZk$zAJHP0Hhzxo@e<}Cj2~9>k_<|F59aMf<;FqU_ zjMPEH!^6Ca+jEOXnXCS5Us3}3C=e|Oiw@LV$U%n`Y!X9*g=AYA(0^WS2X%iz+;Fk? zFYXKg@LKl2Z)lwC|FH`WsH^sy02II3+PTdMp{Z+uD7!%ZjA5)zNX}`2VqucWX!4;H z6=}On|6b9AL`GunEjsIaQd04RtbHzG^Pzl4j=vF1REdG*J;9~crVlSa7bh7pllX*h z5+|$w*Pg*cEQx*7>#3&NQUxVCqT$0&tb~ajJbC9%T^d~#{Ws+zB*kA*l{nF%Cuu($ zCqUTl_Fwx{7vMg1N$m9E*8!TOvBwKilaYj^{#i|91nB_B(qCcq@2Vm6{3qq|i$``L zli|q;m~siZJ;HF&P~a~5#|CGD=SccdbOJ7F43bxOY^3#)?5;F89}k4lp8EetCaQws zB=W~qBBaiLVWO4gMPhC^qjKq~?@<Nrj-S@VK=+5iL~JO}gmf6k&x9o~N2P|8XLBTkjgWZOA&bKQA*=N@ z_N}>CoQi`giO_tLR+o89DTnH>Hvs)9iC|KeHLRZf4fiKsMwshqOSbITM9|2^{`jHR zPD5oV!-1UO#l+OU%j*+{u3H$loung%n9v_b8=0E_rK&UCgb+_@kjDTl-g{+vWKD4C~BtV4kZqSk`!f8&r)z$1dk{O`2lVgY7oB2F4&~ zvTvX`H`r(gb?<_wz)Xcrj`v2Dl1;V}?;58UY>OcjXyhX#Nf_Fs@4AG0D7u8DF%)VddjlIrf~B#HH>qOI!w?NC_YFLN{@Dv`WW`&=)=)B<>e&vA zapS3*7e%_D94IybqaA+}i8oGDxRT{^v~c+!y86TRk9S*0BmP23EwWZ1CE3WuB&Vm) z*MNU?wa2KPGh(8<*Jzm(l=91f(j!DtK}3CbFa3Ss3o{eUKuK+_Dief}gkLAP>=S(I z=?}s+H5;6O{#^GmeZ{2QXc!!Jp%qFNncZf2x3(wyP2Kf$rXy_~l}vj_bl8$CVr3t;5(MVsipV zLxTqd!&{}DI3TEst8%G7crZW5d3)H=1p&{3C^%8u1RjxB-4}U1kpyZv_9CU~7%kGq z=8g^=&4~q?1_KdSeVb!{Z2e%TG&9kbyE?vdfmD6iC|B)>q>j_ra4|l~we1h*EPec` zw@$qA9|@hBLax$R!jqCD!h&Eoy0~JhdeI%@CrS7^PSw1zUADO zscDXjVz;Br(Gs_^ONDPv09T-%!UF!$({P}knq|$N$vIzpV3X>)Y`q}$=HF$r?6eLe`)p6qI^^ zYQx5!-iAkF-)r80`Cw&*96iC{5R&9#u=IpqqpVG}LaSne+jfeJ2= zXs|^9?4SEx4-;hIo%m?qN6)UTuQ?EWr|){qS;+>f9;!@T3Q-scHVl2tCAdQ*|iZFB|HB9LD!!uK!X~Bm<84Z4nME zO5xO;>Jx2gTULT_a%GAg)Y$^=j;=Nm!kq^n_sTQ)Zqwx_wCY_eUylPA8`rm&cnA}z z@htK*bxeLlGIH9_ttWnC3My*On9OzMYsz5hiqX!->F-MgUjk**UIxo;_*|?4y96c8 zX=-`0wlNeg(A8Vt%u`Hp_fzQyzl$@WSxf0+co{M-5O3-^DF)!F{85PUf*gXl@B)kP=;_L0bg_SYu_0(88%#!JewFb{fe3?izPr`KUj&J%qel9j zqsG^S{n6N+f3#ZT^_4X>>8C3x*f$*t0jcpUY6clB+z0S{|3iCQF)>jgxR*7W+9+-!ND|I~WYEFQ-Wn>dG6yDH5y4zHNH6)r-fxJ!n7P75t(siY+a zZYLylOilR6_#HJsT#czT`45nzM}em_B+v0d?Rna7Wq^JopPLSVoxUq#Xms>QQ2#OK znfM}uxP5nxh}1T$dPIM9%m3)Z^aUbS^Nwb$$cCwVnmrB z4qnt^{@OV>EA4TJdhC;$_=6)MHqqMN3^A&8tYC7w{VB;^ecs9qgR5Q`I0*WC)#W}x zCra-gRi0AN)`)zNCmfOI-yV=j(mOitpRGv@mi3y6{{ncdBjh!t{1QK?_#OJHE5(u`$RWns_?C87h>o2#}y%!_5 z<~6+)!hm5ICY5C%jTZ!O1^j_N8}qPh!aP(x6A^P$t&D$z(+kd)oPZGR98M^R@@u#i z{${Q1&Ps7EQ$ww0hYO86LJ|jD5gQ>WC1c{sy;9yYD`+tT%}ghljB}k1Fa#`BeBEt1rEa|_*FN%#_a1t3KWq!4Z_+IJ)GAr`g@uK}N;RY3+6EJH z*fRRM4OOE>A+EWZeG8$(iZKQ2r4sAiKm27M4%7UHWrAW^^D^3-(Wf(c>lVV8-G#L z@n7R2>&Yf3MGsH&*9#L9;iVtyv)C!y|4!Hr^=@OBiIjX;&wtfOdv@8V>x{3XU75g4 zoUtL?E!aQs^@he+F`j!bDJU;HU4~A0(E-j|zjQ1}pC5kYnqug?NV($1X6jvYuHV<~ zna1W_S0{(#NeN5dd+I4T6kXfGXNV(0))|G*UeX6szuRADfMH5AE&bNzM1d40rBqaTPe;BcMto(EgVwnL`+Q}( zzY*PNKArHX>Muk~`q?o}R*v1fFk|4XjBitX2LI)|>Hcm=CA&uE6L*Y#OK&|Y_h>}_L65%taC%!pB9FkmzhN}?39_~jN*&OJox=pK~}d?k+4O)%vC-@Q_@x3 zT>RA4Eqw{i>4%R+jY72q#Ib*N@+ny^m-$Gz9jPg@PF^}daNecd-W9Si9lIJ|dO#5s z;Y9V568_4b>ZK{&Qw{&uO@pPwlkhD>a?y&Y$Fsx=xNU;Nj>P1vRSJjjGPg`RnMrB? zSY~!q#N>^BqYNzkzi1KXzhT@tfG55Ga4Y#+Q`R1cc1j8!n(OacQiBm_ zZoisY5hDKEt`4ScpXic#7z#t+MQxEuOAW|nBGLV~uL(I1YX?Dz$6I*ZX1l}Ckq z9kb}kA)6>;5(jQYML8j*(KM)W7t$m}oQpyn=marPhBI-1w?o_M*EuLPJ)PQY$1gY- zRf7rklfHDc1yLL$I4ow8mnzp=A$FmBl#oHHdukno(#5F8XDAd`W8gGne;S47IzyG# zmLU2`0-}X}`0mI&)N7i}S224}y8bxhImNTA_G*9m&KuBpBc?Q8QmI>VSJd`+UaMh{ zhvDdH>3ns&P_vJFqyN#t@IEqr4vYq5uy@J*W;0o2TovBpme|U#7rZ<_ZQ(B|7x{MG zeWxG^@lhS*NiPTH2AKu~2*rWCJVDGGiULP8NjG?YU*yFb3k_I*e`1 zLVC;Lu}lQWy14dgapQ+fF=Vkax*4MKFGQ;LMn@h(1767bshWH_-(!>@1Itoyb+;{jLC>- z`qXC&5|i72c#*PuyVZ)t88d$oSka)mI`7Y`8D`xE5bkF-U*wG%mM~C>CSkN_BM3OI z1Y}qiqr7&`1K=M_7Y+!9G>)MWUz(XB!8^n8jowc}D{A-4+cz{*`ZZ7whj>-sovV?C zVv0ZU$6Pc|@)u#VU*dYaGSYORCvIc@moWGbh(^P`mB)3U+B@AM=u)y0G<+p0PbGtD zn0&XE5H08fXN=>(L!(VVI}0q_FD=4jnD()@)T6HbEE`*u6mJoryL~n>kXaIP-OF?x zhH3T}xfd7e3(ST7j)TMTMNaIz4+)zP=@1b#!#`x71)aolO$BGBUIb0Xz~EUF+9X0( z{NX!cd?bWTnkN!nFc?D<04v#Xu5vmBv|Uk^*+_&6gFG_sflCm~bjrYWFWQG9{*pLx zeJ=i8JN+Y>*`A)uMyH9e&v~{#Q&1CCVy~*huaee1GsBj=zw-Q_iOLlRuwD~H88|oVLQl(VyS3i3w$|tm(NW94Ze#Ucg{m%{A|1T7P?f*i| z*th}zsRm4^?phOYp^WYVK{3W}1Er>4bJmp0nVq&khN zq{Ni`lddj>tk@j7;S& zOajLhAp&>jCZjFPn=b)OFdLoLaE}n3CD1fF)@sk!}CtSGgSK61hq0j>?6wf$4!So|WMKj%n{6IUn^1}yF8WtACW+SFw*D~5mM(8-n&)p9E2 zufiqBNlGrhzhAjmatQMAYU?Z9H9q<4*j@VjIX|v)2x{f_>SgC*G01wc{sH{q5EP)? zO2S@zcX>Et%g%7RjNol%P)bVwiBhYC#i@k6IR7;xxA-Oe;m$Q9x9Do8``tNtx>pgI zNbdPNDW7y{HRqad#!r3!H^Rl)8JHH$OR1;zw^n=o3zN+-TQxQ(K#&pp7-r@;jCGni zv$5MUrMj3~gm{366?s)t4x%Q$QM+mM3zc`5K<8G`J`NG2$of5x#0tbhTSug->gge3 zO1jnhR^O11Q;*++O{huf%h9-FMsBTuPKkfD{^<#XX7n5JgE~$ExdH!!s^?v@J zR<8ByBwTTRn%#bPxAU)}8^0zxOp&(fOs|xt#wVTA`Z#OUpC!_<9fO{#tav$PjVRW%U>JsUS*R+;J zv?`%lvojGss0*u9fx}caLc;*=@DR$mDSmf2awv9p^)(Iuld?yW40PEw&5EP|23H$% zDwnK95?73CM6*c5=^9E?OEmc`jx1CQQau3Ov85qDt(r?n`CI?&}D@K);b~P3|eR9fTj`T;gux6GO7=Z_o0$)7!!FdQ2FpoGPJw8t}MO;|9EC|)z~jH@4N-w}}B>D+3v z8<%%gY%eD$+FBZUY(C#oFKP+6Oxi%}l(mAtP$*}tcV}$=Q^B-Z!y^CqEtSwL)N)tJ zFawF+2DBLPIYtX?XcL04_}8*x?sndG6!uLL_Ks4?qeBS${c+-|y3+`=v(OT7 zfbZDj7kv4DPyYqL(?4aS=Pl_+Bi&|;#m0CNYf4Tn)wkk@qs5Eqaa!_V_rD<@l7k(q zjVi{A@wtPt`kuX>ISc(z;6 z!*C;6yuG#3)WO0W(;1Ksmk*&=D1nGS-XBSI-B;w1Qa^bdUz}1r8J3juP@Vc%0zXC0 zQj~)8BC-7XHjU<@Vm8^}xJs(XjRs4@4$RzxWT)8brP_WKoGQI7HCGVIbN-UgQ~e!Z zwiAL%Z8gTc`~=CvQX*OepF-XqqqnxpZlwz8t3s#fx@Tv%hl&UeTlBE<3{_Z(L4)hO z4)f;d18XM@zG6MQOU{l~LSvmz@|PHO7@MTu;()FGLnRNisu>w=W;8*MRx@KUkbR7Tu{cqRO@&+xjJu#|<_R>rjz^#0JkW5q=Su8GS5m5vt2Cl79y%GEmuznge z`rYWF+xV-1Bi*{dc+Af#RD==(xbq|k2@HDK@f!D5sLiVHM?M};VJBV|7xvKK1L7|j zr-R-z)%$*oe^c5|eP`(%s}RQl`VT~5(9F$O{>;o=;H*e_Omf%b%jdc>qwKqQq-+`z z_;T?{I+}w8dS8US`MPh~EGChN4zKt@SD-d=UF$b8flGjTik6*`7x1Rk>O5C{=hHDn z^=q%t8pHVv8C|k7RgHLSj5Ir4tsKYD>&7-5S6cmMS=4m-?89?Vj)L2MigY9!Vfxu) zEX!Ho%qJpb7$Wcgr*ZVMHRV<)o{ZD7l6X&RYb|>afW>7{W}uwUS0`;Y&0Q6n3suKU z?daj(-2kh{*C=FrOt%Tj62_@+@TyD%2U*8Q79+X8oJ!APZ~hJ%74NhCTsoM~u6$(x z+|zu5p$_F+k>Zrjp4=_mrZW1zJhnW0Syyt?oH}UD`qDmi>FI3B%(Q28#|&(fmA#%6 z1fHE*b&}a*sY36}7DBA)m`s|w52Y^aqWoIHK9>LbqAs|JW5gX69!GswW7G5_*7}d1 z$BxP63fr5tCdZ(Wb9_!VTE}(+m|11lT0!ELv1(NZ!tpU&^t#bgN7$y7AhRv5(GxQ? z>B`2}Kr9QkW1XV?fZd5kQ@?J4^2WD@>gvV{+AE}^$_Z_$MdoZBPH2*~ z^?9N?^w;!LnLycPY_w%irRfKr&97*B8QJAd`IB}NG%_dcqi~gPp_5?5a6=$@mAokM zI4G9!6K^sf#aoYa$aP^*~+Nkb0A!j;oDvm z@S}uP-B-@Ji{p{@Fl^FJ3^7%gI{tUfFX0NuranfTF3)Y1M8r5x`XGR@G~S zXGukLUVHEMfmu)N;48)Ja!mmx?N_!F6abFPx?qqn{QIELJ|ejSv}24GnvS_C_*>Ahs`My;M-?Yc@y9-nV56)!IYK4)er+`KD>4 z(TV5Vx1g(47tQgBTMDTWu?U7U#>)T5E5O<}xS~O=r36K0Is%@M3dk~PMP5g$++2l)5fR#YUe}fn~SGW%w@&aub-+c2g zngjs+@54D83)g>)hn&{Zwm%fZ@VlyIQFNqW<9)(qo|NgkBoiX3XFLE^I_|JTPmrxA zoPfL8-C(fO&&~EfG0@`aa+h@c1yi{@qN`i~OiB*3?-*RBI#||#z9YV?{jUG!st~SGdt|hM7&QW>P=_2x zejYaXn=~P&rwh2ql?isurp%X0`b3He`Ue5#)w{D}kAk)+|57=}_i}qo-{k4V1{>m3 z)xgx%>*xo@oBH#8HG?|ng{%oU22wRv`_R@uTgSM7Wt(P%5}GXC_vgt)O>-rCxEZ_U zlDCW@j!W&$0yhJnOrFM${T2dU4ds^8g@wr&I4}azf>^Yd2P5h9+T)2eeHYS)7_WQvP**eU?HFWn4}_ zm1G#ixJDXm{17LaJNnHgwGuQo5zXfihoG1QkA^>IK)bz4P2q&^V$eo&F?^AH1pRn4 zUWP^1WZ+eK`DK1m`PKTTI0H!+AL!uE%;g5So`Hk!^~sL)NLR&^c?j|1@B4OqfvcNe zfDX28ho4F4w22$S`k}PCmWZqk>3if@RO0B7Ywfcct*4lY|}xt z?hZ{45OPo^-n=4B*4Zc$$kC6!%4eL^ZCV+OxvB_c`U~Ab0V@7IThV1673d8 z8I;T6dkmw+1nfk>F+^>;JEp!u{2U{-0P^I_0K!?)UcqB)X5cqQ;g%6nNgIfHx_nH- z+{0HoB1gsjn=+A=9eqjgt|ltw3a{c#P&Flb`NhFDk#M}G(3zojW;wDzsIYZEL%b?K z*tOq%3nx6)^A8M_VOID9h~shJHj|FUR6Y@! z6l+a?acC@mRM?VzZf1WvhUZkW(2eIW^QaD%7g1qNTz-b${9rqmI4+!r=ma6kn^}c$ zTJadb8CFv8&?%a93Omz1>62vI#wk$9M7d*0%Y&$_H>jt#HIy$AJ@fvNs>#~v%xniu zg6P@*JdUk0l@J-RYO1#vF?!6AJt$$I+hhy)~@J< z#v!M8uP|Bm2EUbhovY9!I2-!rDh=Nk9Cp#c$8c@3Iw38SR}A!6v;;WRTbw^Co1w0Y zzIabsCaA0Is_F1riu(vofA>1I#Hk7-T*LIh`m|MlRdVQc9{If$fZO1bQ+=YRICkwP zJdcg`>*0Y%KY%vksa75uJHuk}sI#ex@Ok9LX5XF4yWlGoq!;bMuI*K{|r1JG;$(n`3bdLBd z5*42NaAdRPrW0x5)KpS)yA~My0yfBK{JKU-a}tmU&>T4CixCWhSJR5$q-jRxPXoz8 z14rC`tzDXkX(-+uP)NSv0+}=B$2Ojw&E1T8kY3i^gul{7+3otM+rc!&Z#m@bBj-y> z{hPrSjR2wj^Bg)zfVw@y%*o}Q7$ zVqp8#xoVRvj<+4&Rq)ojB}n>wEyyQxhYp?<0$G%EI(4Iu`~9`8Iy~LwJ}v0g=cTqQ zJ5qZ2w7}ER3@3d(Go>Y&jLe}+D-I>^AlTq_RsaWJW!PpE6RjsF>MbUluT--4u( zH~uMvq-^$G$Vnbqr}n1ehnw9Z>6{W1$|t?1@v@g~s-V{z29~t$t8-|0I*VyGG65>= z8kv2OdjKX?St@`?MOBOSK+&RlK zzcEdP&{9*}WLuITHYX$JwgF6Ww@)e9(-L1nmmgNa^1Z~Hj-wc2{!5|&j$C%Du4Qnp z$(Xp%UAtA~UH6qaV4es&4d7y;+h(fWMu{At9Z7+A0CV4{#s_Ol833=btE}!@NBNPu z{n3~5<<;0=k_g|1@-2`N)>Tmu&6@w6S^4c_GihK+j++BT2#(n1*#m5h!Ee7h@4^5l zknIonub5)de|gaWZW8~uLyw#7Kc-y#ebM;a77ujj<yac(LNod7@2@NL!8G&MdRnx_^4qOCWf9Bt{ zp>9qH;E zm&M%X)_;ynUgq87-_ILv-wte*HT=ldXy2zt#*LmX#tYfe5)g((USEE@9icu`GmUN@_013sLzAOokeTzuYEjVCP_pVERT>r7SD zw8T~HC>Pkx>ON!D$Cbi7$=GAsj&fF8F#(x(jX80D?>^fXSD@1iRWBiO6uB$WWle384zzkMyYST;CHBEGv*r zQyn7Nklw*E*b0#LQyma#WVV$Im{LoaZ6Ehr2+@Hw zflsLQMyl!!#kFoIIXLI_{af`R*;r8(I0C~)aZyA>#P``%kWesRNeWm{raB()1~YM} zIrPOQY<#RKEimg|i^j#^O~ZihL*DK=mLK!v?cH+$Ug=vI_Ly;0yJ!LPS;X>KGQpr@ z-M7^T&_~)LXmt>uBrhp@xQVuQ?UFr^v0KO5r~`5!9J!*Ph?&jg0=o@mYMiTnRT*LK z!W;-8ws-VWY&+rm%R_Kb!W)+eb$4sE?qBfZUAzu?@r7dHBLP^k=W^GGk=|9UPZ4-H-v^9?CND`c82?^aXM@A_2rxMWSf(=)`9m^g@u`@PQ--P4^;@?oV8Nsm9c zE97gx&zZrJfE{uqa>tQg;jor{3}IHp))sfrP&Yk@k1cHO+~A7- z*5C*x2qVkYq`WZcFxuXUxmS6(`2GN;uk%TNaF0S8Y_g{$5h}a>T(^hU3zC5?avk5ppkjja1eV0P(~opt zF{TUU>w>C9?;5bnMv`02%;U+|$e|*Cqj59hI|wMvDr`YrEy|i@HA8{03uI{}reMvL zf1wiG%O+DcG5pe-5~~I?E&I0NzFQ-Ye$>$R9Ho8MBYXP5G@NI%$RM$_7<%5Dqi88+ zS;ft}vcd@4w7#t{5x=q>bl6p;^(O?k_|4$Nk-w~`DurRv2fkfq-t>_l+tCl#cSUQX z17C2>WB+Z;Jo;Go1=^#fjB9;0-h@O8w~Ap0AVLAc4ijhvon*f_`UtNm#ec`*1J61Y zog$mkv&av>Z^NCh$HRhJ=Xm5F&X?g>#4B#EFcd+*^AL;?LP4%p#=9D9PhS`0qrCF< z12x>^9q)LA_taKukQQ3J0wLDmPS010NFkq2Mfss^oNH1Mmg3Uev`w8%76Nkpl$_FD ziGgH%t;f9;8=I2m?!f4D#FOb zqUe!}wk8-gp^Xu3V}N}p(#z%cSMPXgo5;6I&)UWhXs*r=7)d20R{?no>@MzLC-8~V z(j3r)>ScVEJHe7H)b5=7HH#S|Ibf{qulgrWnzZPz#n%!1;oEb#_ z^Gw7)c{U3`)IX_jT43sX{+f;_4rpTRn5pOxG>9H9)Xc4DyU<4v>;V9wh?;+)h**w_ zs;R1kIs|>F|FLV6*W0P@CivgJUgc;K%Lv!LiS`7TV10;#QPXc`^Dxmn z?K*9CJk1`RLL)F&OXm0!g5BoKZ{WhA*e`}W3Q^}QpFxnHL6K7C!>W2GjR)4cGwk$% zxVH^o$p%bMtc}9;007My_}DkAm^4|cdrv}#Ap#8$I=y_bb{OhA(T4hW z&!h7GAU~OW9jay2D&>@mk}be)=`5<4O1F%JNwXe9f#yHr%?+E(-3T?rg zH)|64Ek%Q1{A+f3M!>hLJ+UCdYUeAuEM>ynM&~$%B9q{CCe3p2C8j{?jKs7)O2>m3Piqb-X3gQe2q>>ObkdDOoW+c(J zKV<#WaN2opZ(tHd^~M+~lsjY6#CSBvXD>GlR7lNlX4n*= zMy-SDwOn5-653w{aoixj5tUw;M_E$?wFCkko$WmzB&SF7DVnsUFWH}wi~@vi*fn#b z6TeTCN~F>A;u@n+tD&@y&)qc^B&^Ekwd0b&=4RPNl_sPwC&F!NnEC4P;Iyy}z=dH* z#{1glSe&qMCOr;#2zeYI2gIYSDQkU?Nr^K$3?Z`=?L6~&h2c>M@v-8GokqWLthvb9 zCdg0VR+p05_)6~Vups5hOstrTNPL1IBB!ceZvfW6`bi>^LlhYAOcwvGfPQKK<0i~a zASYgS1I4L5gcZdL=Z7rL56}?B z5hfg6G$$pwjEB?^ona)L)$%7b4Ys{|;XD@xyBP*!&I6dfp^(uRAgx9@q>i+6?8OU_ z58i18AgonaLk8w567pJnl=T(%(j8nVnuTI1pE}JydEHhZQ}pc1JR*7PV5Miehune~ zcUk=cmT^N6){+Kjyf0nRg0hOX4IDi4EWAJe6?&y;^v5}}lud@m*aA@@Z#RG{qhxo7WX(y`A1yk+9znMuDN|t3F@5$my07?_29+me z;4PzZU9f?U@h;QMs~UG@!yDjMWadc&@~!X%a%OUL+~gqqj*ez&T2zUk%SAH9;YX3H zA3l{;9Ue$&gU}%@RwQ9(!cBOBdb)_vU1pfdG9w!lv$IEPb>f2i%K=9R>0pWMj#4;zVZQ z#n)*0q+VF8aR3lgsv`8;r1!lmTOPa)YuPCC_pVuW^Vf;QKT%b}6YDf(Yh!VwXTt1n zImLG<^l6`*icvgEb3}gG$6t~#;t#rQKDV_nId9P;q}GmRqekABhx$LVYZD!xs~{ed zsjVj)vuhjk7Lzh~-l}fF<^VB*AfL z@x*Iy2mwapW^p6j0J!1nfm-^OLCAo^KY0)G=l>#E{|esv!u=nwypR88#r_Xv@BCeP zyX@`8nXzqjY$qMtb~?7Lj%~AJqhs5)I<}p3$IhAk?7h!=$JuL~vEEpoQ3al@=6N$Z3uhXzQ)P(vLGB_tx^0r^=bL;_>^h*N)?1%YM{8 zZj^CbVwgjYv7@d>B1@KGr0qO)pwBicmq!8Uv(00ZVesmK*4251VTdTIEI#L*Dj6cZ zkh#7Q_Ri7GLu`>jZ2POT4gIULrQ^ZX+>(G!_H4>n?7K-_wqP+i;j}nXh@#=DaKyXo zfp0x6b$p_z`ss}?Ky_xB#XA+Wqw7v+>kvy@lSJIPK9?@F;cE)5w8fEt7Ic22!9p5 zrS~QV4EZsjaOyD=xV!gzfdAZ-x9ikmKhr)MGjYBIpV6(gR!`d)kr{P!C$$&h$U+KD zoM1v9w8;RjG~NQFUjkS>UDXWCbalCLMl|1+>?g#sxV-1Q1ElEnf?x z?!5T=ZijXbv<40Z8~PJO`J|I1+6PTS9YKlO%|l8ob0rUZ_X3HH4T^vX-l&v0?&n1( zrQ;~B-xmh+w3PuH6^xa>s`Ei#gzK9r=gkd2<9Dc{p~UZcHsM1xgKnBIK!Z4gWF1Kz zpHFg+y%ces@oiX1G7SlIGPU{F8%R@?I;!Ov5$P;4U>L}eG{}d@=Z;{MHMNTfiN8u4 zTC#(>6tp~Lm!coPCfQ}T&lHy0Q>I+~>3=>i`^7tr@|wlaM6wZH?QO`kCmZ~GS>K*1 z&AUV_Otk;-kf`HfPVYR0JTNB|LMqtq=e1Da$6YcC=%{lZ!r7%hG9^{aYKsf&guk9O zF`67CSF!>sxso!!n6TjxqTU5*C>JU+q8$9;Dvie^WIu0B>4al^58XshAUfz)M6#lE zMYVG{t_fuc?JEwY|KdUZL&fwZ^q`8Jn#2S6UU}m~{sZeYPYV$eP*#Hhd0d=2r`5{E{J6l&a2tQW*q= zJ7P+O4UQj5nV$z7u^@aR3k96s#-lK%dNs3B``I#3;%L9*I=pcB_1x=kYf$u9uY<@M zKlC5get22=BwAB|6T?mhd0l2k)HzPJ$hmu4z5$>!uQXY?S@=t%10-Bqx%B#!tbU{r zJdmfVf1umy4U;D}SAQ3c)-uZYI+fJuNhD#2#1qHD$2Py`$|dZ(f1j zIUxnEJe0Eymkuc$vaXE#oZf1x*-za-f7n$qKw@~$hhaNxqpq4OXi9=U+-Oz4!EDV@ zdi8}!D&x14RC(1B2lRJCEEY+}>x| z0ryJVQ74RBW0|m760)%C9k5*GWp-QgbG~5gI=jCp;Bb^@9>~8iM3n+sG!lkgwKT(f zamBT*cfuB}XSJ(tT_EfC_wzhes-tyiDl?we3hT=a1v^W%=86{Ovha;}*sO`^YJs|r z9=xHL5DMt!Zy0Q5FVk;R z8J${`#9Aon$D^{Yow}t%1O02SbI(_gQ&bi(nKVnNgE$Tl#t}535OYUX*;L0mhy58% z11f3Yk+zU(P4y)9QTY13xmIgPl5s|P_RHrf4iD%w-)AT;YrOX)!@(P1XfS5 zaL(LvD8-WG?`IJSXIKWRiYgokfIE^qg(bP`FMpiu8#s()xV^1g#^c;+i3=9Jh~B{y zi382FDyOR_$!FXvZRYRpE6*cM-<_^3`69D&gsNrJTy7IQ!|KDy(5g`853c6c!5M6^`0H&?dM@vd!e7CSe#LfmJb4?nKp-C%*7I~ zI;T21BC00vZ>3l%cKfq#Izg>RXdEZx?mthYCHTJ=tGvWHc}eZp@ErN)&ZM{%bXEM( z_;M(ZzEQQRM+{X2xR5j-W(f7l%t#{KXe0GeD(j04+)r%Lae#9`<5b{~SO~ z6}kuMXI1g}{DY5JZI_(a(&Op^hBM!8@4##{iT=l;1jI*d=I`g{GlM9a-aBozW8eRD-?8(OE2iU1j+ zo!zDf4x!Gs?m2D#CLjl(E!IVZN#xYXW5kv1ULA&HWvA1zmKQG;0>f^CenCrltdwO8MNNflWW&F~f z471FHQ6i_O78eyyt!-c5V2pIW~`>8RR1e1e=5J@=K}dAtttx5|PVD z_L6Zx`cZCLc4m{KJtS%6y4I2) zBEC^fjm5II*$gcDxpW_^5_H1!YfVY=IOv779!$%Wwnz)4BASPedXuV(TJMD z27Gy(1ShmQaX}1UAM(Vr9icA_L?I{V!^D>*ruQ-FesO`5nlG8h#c1L3y2|lAxVRKz zzz^;drw%4bF*Fg@?i7STk<mfbK;U}t6AE+xH;%dE6i zXDuWu_T*LQk6&?NgzVAaBjEOGsSPw4q7$`K{>qfBHZEC#?#smoqSW1*Z4OuFFlGqo zq{C9tpv*iFX??4=lhE|b$EPu4mz%!;0cX5{nuUH2O7=6y@X}+MQ3s?L)>p6jVgX=5 zpnb0mMwVB&JtgI~Acj?5Y67Dg6uL!UB?WdkK4rSa*bnxPG2XiNV@>OLqC5QXb_)_g z!qgRJ`>B#_d-&z2N(2dO4L+Is#b72&4m8PAz;uZR-{1ht@-|HI1f1ab0ny0dXi&!b zV&Yf4kaebBYnHBGsQ?b3i)X6QJ_s1Z!^)rwoIML_EtUY2FPuj@Cnb}_)vo%FG?F~L zgAY?YY~>6{mg}l%Vg7?-?Qym^GcZEKqxOcpVOcENcQFd`Z#F7V-4HIJHK($zV;mFl z=rE)`;T?h!n?pM3;!v3*9#P!UEy(o5e}>S|eMp)2G>OXnQDDCK&k{_UO8BfP=z`po zk}?Fd4q^yk65$RmkSgcNYg4 zeA6fR&eiyDKL2e0E}p>te% z4M^h!qSUCQ?Y6Tb{fka*UvDobIg$2H`1|K({)y**GF|=f;>Obj^4R}5fxTe(7n!fY z^Um(gJb_(Kn=^^p*v4B!z6@6*38_J!u?BnfN&PRtR%Aot?_*q-{W~9?5B}=^0NJ7c zt}+r2|N5P#b`NWaffeB8B9(zG6tKWFUU)u7q_;HvUjU)e_UI%r^(W_lJbE{G*5^XN3LjFS3rGhC7d;`hOqAx>-e|_R9%q&BpjU`Mw<$l~O<9mx%bkJueEZ1#Q~i zI3oTGiL$-8Gk?`T-Tva3v;47nT&eXm$LkdbBSSm8So3q1{2}}lA~_v?Qf&1 zJ#AU@{+U2}E%53qG69bcV{XyjKI{D+y)RPQ%LJ?&i5Tdt!7W62x(X{b9xNjKYdk`^%x;Oxmw}!O3KWNn^kK|Gb4=bzBZp#K_YPg%WS6#<# zGQ8)T7^EyKM@^8&F=2wa^lS8_h-q^9 z%=roi4}4HG4=}X&TzVqcZmsX)V$Z^d{Ky+^H1XjvlhT@GoxmiFL|ADSS_|5_oC7=< z4UikXh)!%$#J+Dyk?g^IXA1%VEbr#j2#~%)LFt8Ht8J}P5+0}Sx_c*pU`U=JnFiuV z4m=FYrhVgaLLNvUucY-;84}BGnydBVFio95;hrv$C7G6byl6_%Y|#2V850W^|CI#^ zE*_wDj|o-Rq~M3cfxJ2)>HVvQ`0N==eNf}e;0vkjBn57ul~;r#^LF~jM5rvE{Ib{g z7m92yllX~@EQlE|fF8+^Tn91edD*)gRtp1R+EqA9&&g^Q++F%k*Gj|Vi$leG0F@xQ zaFxYs2}^l*%jX4Ddltr;qn<&j-oam_L4S!$f!1WU^d*0f~kp-VM$Vme|7 z$e?o&I9N>&ZzGPbKZ%L8-P-`u=-n9|yHPsQ;NmyI=Ym1*R&C{rR&CUVw2Bzo@r!)b zKlXbvHWQ3%DWAj|&XH8;TE|@L^I@liK5S|#tu(%v0Bp!GQxh3Pg~bO3I<@tV6U8Q< zxqPdyj)zte8>zMr;3JD}zEKqeC4Aoym^Ja7Nwo$FEXJ#@VVA1h@q^BT;1PGFsGKQa zkK++hUdYiAtx(yqLqrIB)rdm$pV!|x9k{?znar2~dE-S#=!gPe**cm8)C9eRO45Le zlDt}S>^Q%gc?GSupFUVe?U!sJ_QDVMD%zB44-Vf%%$Ank>^mPPHEcCX^aeezDz?Pl zsAY#g>SQy;G`DSI+lU@57b>HUXH|Fhp+{(}pV!-8!XHK+=R*^r*A-3I)g5Ar8v&O; zTyIHSQrCv%Pt06B@kmSW%T<@MCjIfL-x?hHoeb9)>b-gCRIW8JmAGME*9RkyCe(NDBCY6ou= zmQd0nfFgcv%pS2tZDzSlB!rEx5!r|xw3WI~o4^7xUU%wC=DxC@+*)Y=EWNjZD>JgK ze;9V3*ZhZG%k_j4=qcs-E`SZ&PxwSNGB^HB08%jQ(`A#h#dP|cuqW(&P!$Xt%$XyC zCB(sG+LlJ}RSGP_j=d@y&(6OoEkLEm|4zQKvj4}Iwf`SOD-sw4Q1Fxy_H{~@r>ZI^ zF*>Y-I6@^-RdW2Vp%nt?88e;08CwuR;vhj@84268PwVZY>+Q1#k8Z^Qo_;+}b`c;k zR0H?I%7Kvvya*QPB$y4vv1H_0OgRv_13gidmM)v{647-I+K86;>H{_VaabDBHkXHg z;dD|R6?Tc@nQB2u`+Y3|KSn@dfXxL=p+A|dT08?(ZqJ?p7^6U-n(Ww4zHU1J$VTs{ zLb8MM)B3AuJq$Pgt7t8{t*rh2$C#@1cnD*q7KOWjRGc(65G9FfuOHSY3P3vNAPN}X z%}wc^8COHF2$MkJszc1!!H!aj-dz25Uc>+wg{L_pX-)7}TMycA zQ#W}pj79vLs%$F-Zl7Xhf!v+2SPcPuk8dVYTw{TpZ@9OjGQc?SUV{2_k;;yaio5mb zrjU7o-lfFJ#ZAXR>mZfQ^q5MstOrjb z&Ed?kOa*QY#V$51GBkcBrCP(&Sys@DAAk>cF*wXpZq4V&xWrIBWwXEEBqKEdzDQRK zG_pdFqY(K6&#w<(#Oe3?I{ewfWfjfFJ&SK;1@mw@!-&gQrv3!QpXb8?W|3g= z_|4hE^eW*4vJzFso@g9lbm0N8+yW7hs5}D}$8V@;nbnEQ)j4aC`a(muUlRA-zx?vl zml+X(fpk5T2L+TR|ib>XwKT-s%Vz0T< zK5fRLz185GCj-sCZgJ%+pN57Lz9u~w$={L`}l*6ZtSuebM zyB{{ZggLFIbH44gAv^3Wn% zIU~B{kB8bl=WSTe(QZ1ZAhbllnL~W8Qs!#1spQ40mD>*{u|xoOrJ;aZkKP+%3VU_mq^xp*O}Iz<{ymBJ{rh@6&{=!}8^I!b+=e@5#S{|Q-LB2CIL z)JEKkE_Dz8lb@S~Z~FIzzyH-(v$?ps+=KjvD-}L-9;~n-4#C4*PRQ~X2#0Voc z34w(HXg#&f&a0Vey?mcw+mT+G|NHaI1-y0o*XQ~F4~)Rc^)E02D{zVYAHs2_G*tR=h-utXBcu!RJLp)Dkb7EKzr|C?z#wexaK(ST=4h2lU2K-X;{C>5cfVR} zlPLUAnBWqoV`!sPqD&06o$iWn=u?1IB4X1;!z|FGO1f8%$)x3O)n{o(n#4u%9y(0xye= zErzPdBd7_3C6$E~0p17#!zmCtkC?L++28@d^mVud25OfH843Vy7c;usOfD)Z=@qfW z0`j{aC6F8n{EBrL%@!~2;19l{zF1KHZ%!su4&GP}SobTBtWZjlc5DYaWC}tDI){N( zXEs{=agT!V8xBzb=c=Y@B?K|=sn~Du?`%>ElT-y81`zNP*R3cbGkrh4$Os1{d@!XG z2*D1Y2YFyz{OBW>1@D7ztw8t$gINfbg_ckvZH+vk#S!<<%2)6w!90XVPtMPpbdVQA zpR^PNA)&5IsIgYEhk&aw%6JwonW91n+yx6WXMP-ToV-A;9yTgvI34@Vmh> zVM#zlLcf?I3IyJe4kB{VbaF5v_~q)wyo;+-y*6P=!)~zDV-a1?$HP~TbHOZ<@r?O4 zkH?q$=d-OYMk98s=|~(p(r?8xLMc|6gVK$WKbXQ&%3z0P3_PQ)(j!P}S6*#dp4iAdxN)?-keb&?DzZ}bWw+5UX>bI**DuuAzLZMIWPfSIXo>w@jr;fzQ zPu$qNfBf_|@q2j8WXH|kve?g0&!~CYuIg-DMP$1Aa7xZ1=RT`2Vrdv0EtC;j>@Ym{@T4`(}IX=j-}s z*~+uF&AY98<3aFvB5p!qVxR$E@2f(to&i(IH)mm$FgvC=S!+z0d>R|U&F#<&OD*3O z-gWfB*A7l>kh!b77_tbRm6=&~PYW%~o<6(X&<0AGI-YZH!@m~|-Ed3!qRd#dt z`HSFaRW7HUSB6tEBsgk*mE{Z3ppRK2vPST*EmMgQV0 z7Q@%x`&G^Zabor;p1RUwB4N@H<`pVq-?V9M3UP6rGQuZn4YO){Nyly#XJyy}a zjUc<+meYaAxs?5Z&e5wbnf5)sAJyabfHerA+FPgJy%ra0HP%QHQ58N`bfgS>{uI^~ z?RAK6o4*Vmot40O#Rb&7joQW;U(f<}qLpRlxfemBr9*@4`ey=?8W~Y3uGaAx*0mC8 zEDR}s*id)bEB=ztFZm?Rex;#T^rdf(Z`dlD0qD0Av+$`Mf)LJ%6q8UH{fQFA>#Xn9 zEr}!@G9CEsjT4RxmwUG%+TQJo*8#XP?3saQ;WTU#6@hE#&YC#Q?h9>Lw8~?yuri6q zwiyE)YwrebSoiww(=yNWx3r>!OZHLU;%+*Va|24xdLAqTu7mb0rg_3#(daN(LNG4$ zUvm`lz3QkwZMT){kYqwNW2ou8YDAqCaTi0b^>&uOaYFcRE`x%7?mXAQY^-}@^aQ-; z%1!fMT*^%gXzqT8`QP7UZq9$FMCIoAk2ML0+EPH9&_AREOskT>I>sMtVU1Fy*(I!U z8xK1kyy%bj%32>jL;ywdrq+6!61(rUFoBwc-7NwDi3Wg#K(+z-H@FWGFNy7_ zhNK0J{~E@-xMBQ@N7i8JLim|ru4X!6#by>gq%nb_=E&U6^?G=RL6+V2mq%u!Jo8tR zVE1cmq9F;1viiR@37b&=Xc8Qqd;nx%H%NzN)TwYz#?* z`9k1}d0Fe~ai}F9Ij6M7Kh$lE`L7Wb_@E4jJH_I|!@&gy38B}x9nb9y!;Kw=aM+)E zII{#AM=kEdLvIMm!@&3v^<9#VJUP3N;FzxbuSjHo(UbG!Nhg?0vpXu3 zl#=oB3$TlbM(1chs|Joc=zmY0`TsAyRPlMW&)bQ zaj5PNi>*b7U>baNjtqC6JXr(6abG6}*b4)@ixi*J{~}ToNkV9CPy*^cs2JY zY$aJ{5cKh?WI-)~%ka-US$J4}EM9c;GcsdwgPTHUm3ZFPR zLpy_;1_FNFzot~;Y>{94@AqhwrxQir>y6cV$H#2a@4RPzmf-Bvu3z7T1X?7e*X-Ot zhVw3p{Gb3;B9v4plxKkVS zIx)kUN7cmBRQ5F7aQ)62eAUHI{6P%QK}QPlsv00R>wAj@=nM@WO)}VM1yC%mi7~;P zWlbI@k^5Zt2tL8BX+EV53Y1_z_22SP`@^Uu9GG6p_Lq5|;i)OlWUpG;Hh~GT&E6K$ zFOYVW9}~ux|ALKO$If&ywmIp6n)hMVZ4m}PscopNwAppW!DqB_?SkmY-?u#VvT}x) ziC>RzmBlo)wBIXf{!MhW>a}d>wO_a1FLu8QC~1cx2A}eWm$jZRWmn_UOPR`OxF|$` zAiuY3SOlZ9SnXX3*&AQjM^N3H(o3Ut%|J=y{;kdbZc1RmE~Z&K%;3t^YMK=uXpk(9 zZ-R6Fl_zy872-j4rB@mmi#=h22XVE}_lh-7(AWW7CyF$7-5FxXrfEP#xZWoGyMK^k zNJ0QaoqK#!uzkBqZR4*ymX#{DEz=~ydF*=KaT8Y9K`R2;7t>loX+RuT|+lfjHUWHr`r|vK7f2?xYFhrM63c6Eapkr!>nJx%9 zcRK+kGyT@H&MnSW$FmrB`0coSk1plvGw0QqwyWq`c`fFSr=i`|Gc_EpKcl`@9?2>b zy~dzOG2u8PcUwih8c1)D1Vz&Yv>H(s-kQ3CD14^5()=W@WjYf&Q&m+iD)!ysQPasj zJGIgBY^3zN$RIA_6QJSmm* zxhL9JK8f{}qU4A5M}tX_+Ya*3_hMGTaaH|l` zNLCIJGo{1~0Y+QkioXF=Bl<02XI%M15Gf*|RS z_h174GHK$|+U?av;00qwBb8(#YmZXoVvBEl_}E8)vhZOCBHJ_3$6;_jj}9V`!pW@) zYW7(L^Y^mbeb2I$xpoyQh2L|R>qYF&O+r;7jqA*PWv5*SLf9#F!{{2n$zfhC3y_$< zpV(cES9vFoFfIp(+h=c5Ghbs4?oKg>2g}s{Za_Oia&B-gKb^(mH^cU(hm4pArFltuM%hwn}62uY5weYy6e9mSw? zGoe0sAo@k{K=u_>9!(@tN+=zi5|S{6WI9HH57Fpx3LXE*{-8_K>)*Tpxc==6fayOD z=}!GO9vjF?!nC3g{tcBb%*c=-8VyiIcU!$to((Q$wa`6MbGg6!;l z3q;24flAGS!kXq&8l!L~gn5=1kGr@`YkS^*!cj-<(hU^_F8h1yirA?D@f*KPv0qg= zo#)oX=<}*#ktpP7M(9j4o}?&HU4Wet)5ftvne@B9UGKIE)rAg0Dbg%uO3x#jKg zwixI0Wc78wxt?3*gw{&CWl@Wmh;SRERgEV>6Ah-1tZn9+`Xe-mcnj3@S&H&C%D?Q5 zulJAGrXJ=Ax&H(w!ZbKbh7x$IaLAe1zb~deuh@WDbZcg*=5t?UJax*{kmt~=?whbZ zeA3CWMc8@w%?i_DZq2STId$TeX;7#(Q!K^YEcxz_%SA~=GJZxYw5?MXP#{X_V|60b z8!(JY_c}Y3^ZHyh;c2+Ink@{rT}Q+kBAOqJSQ6hXh<@8y30KR9_%t9|K)nDzW^tB1 zEVo+OAM;A=`lfT3+v54-uv*RMUCQ=`<=INf&XS|A1+2twy($hF1vsa(=)g_rf;ozQfGJ-57I$ZCVYI z%a33vD2c`n-#(&ZFs#;6fvu2NH;FxTOBT#OQq{=$2M*|Y3N)~ifKgo1KavJa(c!6& zabU*&Yz9{FTTx1=8xIJi;bmjV$kF?8ITXc_4Hb>wG_~BcP`5y~S&W`BY07Dj+6=?y z=UKfK?dR*QJSO0!48a0BNIpj^Y*fC5ErW0O`Dk;yqJXrZ%eSK=&eRyV$xq^r!7)vF zgZdxhVR1Qhj-OXFnZ|e?=AakT`jnA4rc`?`$EF>{)<|~J@ymg2vR&5UfbB#@!FXFi zC=w1L2T8s)mDPN2=>O9U>%$Pq*p@43C81-ZA?T&nJ0+ZtkDe_!f}l5CMo!JC!EqU%U*dGyEN}q00HTj@;R2rSV15 zq})pFCjRigT3Xe?V%#rS8oe_^dQD?2!?;O;XdK0EjHnHh4=GC-sFK6SM*)L03t(Ls z&zPJY%E}MWz^FJkwW}oSDm+ieZllJG0$Qcvh!TUa>XruNdZ%U6)H-Z&*R&2rY|R$@ zC%ewmlh2vyZuzSm^*39@5XeDtJSo-q?>5zyujw&y%m}s}kz7CEi~ow`R*HOce*ZjQ zo+a+8%>FNt+?&U4#a7hR=u*^f!lRJ~dgscNOp~4sQIki%gs*m^!VecDQ@4A2g0ftw zVtyg*z(2pfRzN@7pJI6-?Atw5;SxRQR-b>R+dd`FXSQkdq3QsS!P;u?f5;lqpAuF1 ze8MgGHhKka4AmI8*?srNu9W~sHpTzE!OYn&OcxL&oAEnm;z|xz5U&WkOQG7$p%g-z z1ZDQEAy{pF2sxuR^g_PbwC#Mj>wS`G|G~_tSzwxK?fUDb$LM6r%%o>7s1tTxhYncj zsBG4&3pV9Xs_}yE zR;K!~r8f;fol>^>JJ-zRRg5ml7%rzXnI^%kxRe*=?A{{@$c|}_UfHFK=z^-%9~sPF zjUC0Iz%L1dOiq{T0}{+RU-`SYDzP&2_2WQNf9;fvX&O*Bd@)91uMKU>-gL3Cu~34Z zw0&TmL~!d7{!@n>Os)YA$~(JpqQc4v5OZRyOb_)T^6PAxLeyTr;IMwBJ`k5pBpnux zR}Kz9AhfW(sBH?Ne-PWkH;9Et5B0AcZb!@0B*vFVy+%U!6Ba~4fWgB%Ux~Je0r*kL z??udEC7^yuj}1u)+!RPPzFB6BOAW?r8Ud0T_|Wr_*g2n*H&8hw(qmGFP*=`b9(L%| z`M%@|5%9`Z57#Fd0-)@rfRQS-8x*$HzEfs-LO*QH{^6MJynnY!i>x z#@?9F*>>_r^Kw^7+oW$N<q{TCgZm-{az5 z?+VoP1Nu+u^~k>|-`uSK$58cuP>0;C{}<(3$9aM4FIMU|-ZVT$yNsD8;R>YL4^#7I zlic>~*!}kMutDl(@Vo76?!=2hDeZamH2%hR&85TJ=Wb{65b=d@@#{D$rSzcB_-&;} zGw-`S0u?1;)G1fC?&#KJQEU_(vIva1CsLl6Px`2mv2!yQy5Mj|EHb-2D;JKB-+S2x z*4H%RT*ge{UKK!O)rh);{fLBqY;BG>9cmU@z9Wbjl|q4yugiDwLO72nP_r+ncs|Z@ z#|gx;nxj(%3KE}BZ4bj}-%!M~?5l6tI%uQ?7`os>rjmOlcWW}l&xev8-!Z5}=r|Kl zqECW%!D{s=G88qjz~72ufAY2mOKtOflWf6Syswr_r0OY4>eQRgNGmiRQu97T``9QQ zr!?n(j-z>@$t-r=O#P98;Tm*m?J@e&`$p9zKvnBqIH{Od3(;;&nB1~ma|>@%shJG= zW4!O+wucW_v%_FkN*F#RbJ!Mj0mmIq&U)*K!*l5g><3*)3|1PyZM9Qwd0G;;@_Rp4Pf3HR-YakY7TCG&?xnj& zz|bmc-}U36)^$BShAxSWd4p7j&%+ndoUg$hq`cdhaMX}C=sO&uoeaXo~-hT2vOXB&gpPZl@NsOL2^k(4+756-(ja=iLcw4UY7yJPA z4cNvq1s8e3EZu9HIbq!VaS+^Axw+vbmX0^rr~F+otS-)Vq=Z) zKJAF-8f=$8jEnH~S&ibDF2}hO3ApoAslT?KCrsfVUi)fH;x8QCWj=CBFO6-mUCXDu zE|+5G{ZTkk=0oO{qh6QPhyl~(*nJi0pfO>UkE%~=Ed_07Q<1|H?U&Bl-cth*%A9L1 z+|Y8BIve=t!y;t_W zyO{KH76E4vX+$IM7K#fQ!SAGR!XE`p2Sut&EUalwQcQJbgEmAy-_uF#OFo()zD)g0 zm%sfN1qBTHm=Eacm4$63CG#)OTH<|A{o;U7#Rhq^i?e#m270O$b2!*L9FLBz^Y$e} zA0q!*N1U9J7zOj+rXmlh!6X-Eo5)ctosIq^KM9ZTOG4ap5&J8}8lYG9mHLfW#GscO z!seUjv^ySC|8U~-AuKNM#B|1v%l{Is2h>%!Nf>LtGy5CXAm;9HxZ#bGfIymyg+sjsfB8w zZ(08hD^h-YTR@j_>pW?!im~;wj)LYqQls%F?X}>T+6)>|txXN0xd7a7*cL1kb79RD zXi?y97znAJM3k{`vv5p@26v@~b10E1g-XxexcL6ut}R<3r-uZR+AO$WLRAZIS3H;x zwG<+>Ww&Hwvru5i+%jgIj(4G*k|07-X0Qzj=8)I+XML(_Gb`(O`__SjjY)AQ^v-|_ z2F{Ds6Ihq2cL$jel|(>?xNUS3MFJ8Pk<>@Es+*>=P`SOK! zm|%i&F#mGIYDldOvMkR@Z(^?6%)b%T#1ZFO6wzL1d`y+ys}F;u>zo7y7I3Jckd;`?0DT;^T(Ol4=>ub)?*@0f*j&a`3p)bJ8zxOs4LTGN^&#w{sDK6 z-MGi2T4TNZwr~Gz1`6oveZI!XEiL|ctnMp4>>9%F=D}!hsGPgA9?PEUT&4B9S<=CH z25p|;bR72nrrzWI2(>)xTzGhKAVrxD5Sy+Y`%u{4rRZl^8zAfNcK*9sq)&!ncJ80G zRy{;I)SaIGJ8=WN{a9+XJ!Wfzj9?FLr7yikAJBJk+y4K%xHB^W+wgy_O#i34b20zN ziIyqt2`Auqe)E;K6^&@7NuyK>F{neCPjxeQ?0f9{EJ~R5LYY z=Q0J(=c7Q?{x~@>zuldIli|($P0KSycmZvTG!0$yTSyAs*(?8TTWm!8hx_n6_6!+2 z>~M>w3Dg+-wpQQ%V_P(vTTbffs;YYaXFgx=np3pU`TKV7Rq-ShU0#p|LBiyFwedNE`Pk*PbJu=bCe(^_`skqP z#Uf+NeqJ0v`>H=qf0k=oRkT&BE}2ThI)4noXtfijA_%lrA@N_EhcaFf%p;SxZm}g4 z?Fw7d{ybQ^g5_muuJie*>YRt8sSK*d!X#&M#oWgCmlb_q1+xm!h+T>ZneD}wZm4bd z$L-I_`IMm^zN|;DW!0~R9g<0_Hp#vIO8{MuQ z{p_ZqNnd#6DrI~p@Z6m!!hZca0NU%~wLfAT>bmQ1!$XfzYb^U~&ylYR;Dr58Z0p0*=xvrFJWT8QS9@Oal8a?qJs*XHz zkr5RWc?G9UJ>cIb!xxRc3{xi5s-2I2&I0d7ZK*qgxcv}rgU+6xKS#%1er$6|^_**R zS;XCBhp8ODw&LKyTi$IoDRc=b%4KSo`A@Av%ub}Pu5729FS_iKn*xP;oxe@l5en1B zc;PRHtS`i31{>bKD_Scp5Uo?&6pcYMcnf9etexzGr}|t-=*j7*?|P^$8Oz^XYcUZ! zHpr|R{)6?p`*+hrzC*Ire>9QNuR-DYZ;*-8?w z9J?u{X=2YQ~(}D3+L)jSFsWNTKOrW z2m0ub>{WFs6Gl%riM?d}oC@i6W8jbni8QH0ao*H;0wJQS);)f`2W-7UftFGa9az}g z-~4j7wV^KrQ6mDCVp0~}pmSrw7ggNrm6R8!=fnb=FvVYQb%?)`SCUM9Hh}PN4aEc5_f`$l>SB&*d)_Ls?GZ{zlgTOD@AtQO z?;hEL<*jC-6JJ@<4W?SB4%{f^QON>_Sc~xEtNWRLmY$4rnbbu>5NeI~c+`q`Ak0mu zTj!S-mc^u}rFkZ3q@^|61(|!C)rg_+|J$ou%h(fgw^3wH&mVOt;IoES1$y+0@H?cXV>-KC?jye;{)F;BLQsPeHV_$1xTM6w9jq2R5;I0R6axIndhMs2fY^HF8+p6 z7|j=~GX{h0kJ{^EmWB;}?u*`&pfE^=8%()^qeH|=@C5_KyF{;@^8tIn|C7iPO=ajq z0vIbLhF*}vPtpe?4}BD8H$uh$I@}IWK*geklplwwCgbPM6!U&1z+lheJI-TOgfB@d zt(E$}U*ljWK%vZGZH60#M+Kdh#EmgRc4nS$l~J&f9vOhLjzFL7B0aCH5NQ5>Ay^(K=z_z@~RhqV|j985rGaB!;M z+(IbB6z)8?Tn+(K19p>!_=O3hTT|%NZ%f_iRx!}FB@DHGetEfPsDEhKGWedW;F%jc zV@UwIV#%GYwVpxYtvj%U^%oZ+AY!{Q8!z=l67yCBCz{0HEWi z++_pvJM}7ako%oKf_5RqR<*J~q=1Y>puqG>ps+KJ;5J(t_!{?q>5i_b7|T@h`#X%> zmO&p>sp!wAlo6qmDs70UXC#Tu@38-_)-wN_^e8I}=YQks#%uZ0;S0GgPgyDp zFvhx;O|(4c$}w4!x2DbgHWLiIO+brq5*?TN@Nuu>y18;erB0fB4zdgQ%8ME01D;IS zg?Bo4i&ll7b|Q6{FiajuH)Dz>-7hAZ?5* zS0k_2wN&W*@&s;Zs*L}hk*OCG4Te_k!u{RzM!&C#Jy)nSD-^R@Bk6R=o8a$Lk<=^0-yflSnesT!;hRn8xF${*jk&hF=iN{a%UbsvzZD_46;)aXGr zbj*Q&m?&Ya#C!zZPNf9#`#D-X*vHP!YK#HFPMD_0r zg>#;aS7zot2-OXWwwN=-s3I(>XGpz zHQ;_dbZbs$*^H^eY|*fnANghBM#gv~W66;+)kzYNh|~$AP=odVF!oI`q6F=>W81cE z+qP|c_Sm*<+qP}n-eb?~@tt#D?n%zc&HvDq?uV{UCtto)ty-YY{FP-5(iiXd#-lYX z1L~z=qMtpST(N9kyuPw1R+~N8_M&_M+WN#&fhji~sFz442{qefU4V%)cy!NcQ1M@4 zE?I@_uJHD5u#qHb?CczBS@;ledKAy!6ms6qnna*D(6pS}D)>9}ISv%U=>{~Y#ob9_ zqRYbxkWBfJP+`^(ypLh0@h5w30E|Z_B&-$VN~9SMe4L+S2v{c$1f#w=9F?u%o3SUk zF(-iBKvQwH-Atjxl+*-{q5 z@@pPEsU3;1)rsINQh=^Rvqctw9YNtyTOWnUVt0hHW1(3?BRt6 z@h6bm>pYvZ!ATIl(mvN$XfaV7b_noWXDeYclv> z48h^H!C^-b+;Xx2&BifkoCs8O#&5Rxi`ql9(xYP=Y2Pl*>r5YFMjG}XIp4PqG;nfs zyrN-iV%9`4Leau-Ow-!((bsxAqcqO??+Ct#G>HNe9Et3T<-{35wq&?LWJh(+mb4<= z*|FEMZ>sC#1JKd47Gcs^kZ$L!ao$VslZJyY!!RChS4r<`yCN+g*})OJ8Ij9P)Ie?vJW~2xk>tZ; zODVEpV)O0I6`PqyxZsQ~bUTxeM`;Bq%v@e(>Ec+ZbLLPfT-(l>Wn?~jUOf#Vqt%it zK~nfYc|4(z6*gyXb(YBo%`-mS5$knDZI&46=+I?M85=Wl6MTfB5h;b+S%7XOKpN!pEjLCV zvAk>Znds=h$<3&nwpPnL;df>*X1*8GFV!F7Zw<&!^069`x1O=6pi(PrEJwh9_c+vu z4Fc-xKpnVT$VVwZX2^c65?ruq8RRsJfaJt4s08;;=t|7@K`St_zNjO~z{`7Z-aLKE3aj z;}-sA;G~Ukc(|#W-;g-7y2#Y}^vTKplbUDJm1L+W#i^L+6fQQWI=9W1Al~P4Ar?Ix zWX>r|m}Qq&2Dbq_9+>se1M^g%1R|r?-nLR5mdV07y4*S7z_2@NlHy`!a5^foo-6{= zuNaI`q{!7#fG#Chyfk74V3%-cu_&iTjJbqjmPfx4Z#CP?v{DLWcYLB_bz9P!sO8~7 zOaHc*3fB`lLfQgZ5ND*$;15Lx*P}devV^=r>5P;6gc1PLt6;BEPVepSGd@NZHWtzX z#%C;T*eESzK_b93HuSBZw56imw+m!#mnA^_Jk z&eoH*S+Zpnroje1)*lFJN?^n4^uAsr%4#25t{Bg}O#2=#kWzW+CtaK@dN`=nuS>0a-(KyMH&Y}0B#K4 z?tG;JOl8&0slk*geQY-g;|5vw$Q6p*|R)ClR zr`}EFZ^n*|tH7BoO~wwzHPF>}!-~AE62}eIt5|xQtgl|i z8`l=pV7?_IM|F~;Vslc`94B@}Ig@uOhhHyM>OyrOr8ig7W`R2m)QD5SUz*V_V(`-1 zvsY?Xp2dI7hJ%@?$KAdz=qKuQ@(mfAAWq0s78L6O z4-KHoaHHHFrka$=!&HC50lMW;@B&5j(;AqC4c(P>I0Jx(3iA37@dnFzj{hQv?V{La z9Np8Ei%k75f6POl^V=4;eeUVm>)T9|j_*bqZNYV;R}I#`v|L6!qYZ)FYSXi-j+?rO zstI(D5jmAgJ^t|>FKTeux5}ITNkMH?Biob1{Dn)w6#G~X$06+}v= zzA?VWZseooy!|$y;%^k3(#4gr_$Z3PdRY*fp%hq3Ipqe&Ia99Y%XsJ({+tZ&?8jE# zANbj?yw-j|-|shhP4mC7J^yGssnH4XQ2rbg>nkFY{=hGmwWs`V+aorH{|QC1Gcy0j zw({4yn$E=HPQH2i0e4XnA*Cv>1rWUB)|NFfJv`jI4#PKM7(>x3)H@A4^C5HayNVe+9&+X2kxzqbuptKS~hiawuKUgh_?!oj_U6eUaOS3yl zDS6pmnRV9&nPz*^gD8*6rlKcFUu?$4{QXn)Nn1yz`y`vIWlEk2O0R-Lcb(42ayPjM zV-1t0v?5XR<3PiKrTQMXE_E;!JS(pcO)6&xP)p?iSl`XPx4Xcy^`s_zc@c1)I&IOw zy0fziGD|~SSNR3q?FQx0V;Al6e(d!pCSx5~t|>v>GNxA&*EL7oVm6ri>&wauk@qv( zPWfn3*FLx}8_Mh9MWsCn|AF1>;b}J;8Q|=q;9c1J7QO+qFJkYT*Y^`= zf!_{`rM+oKP&tBPJx3mv=kFJ&1 zgPWcEXDJ>zL}MI*L`8(`Uls+Wb)VIa8`RLqv}YL{R$Y5 z@0UQ|y*~|q;czsiVbPM439t9)tK)k=ucrdNe@R;$T?fa;Am7Kp_3-_6{@sqI~aUw<#*#?7e$n10N z;Dh#;HDD5t+{phmWmb#my#5heq9)pMNK9`1_r-qxDBJnq{QiCR^kw@VOYJA6{=GhD zh9X(w^`uUbNnN7#$9=}ElXsTt!H0TJszvWn<7bEsM%^(OITi5p3V=-w_^%hF7(e)ojkQ+7JeC*bocp z4WQvdmq`-)uYEL(R@EB6cr+%pG{S0pK-53K^C%K1)5F_KIo48OlL z8y2geC%AeT9@_+F0#bD5M%F>>>*dY{l&fv(KRW{JRZ04KK0Em=8@4A-S@qg22y7lm zY`|UupfrF49FQCs2|zqdpenoz6AP|Dxg{j`^(ZdP8E+PJH?x1O-5f1un*+-PmQkJM z)tD^Xan^Pskb7i~4?ak=TjfDymYIVC{USogr1g~baRAObI;qb=xz~d4iXK)J@yYsImW_n#Q(^3m% zV!t42J=-B$b~55ecQHEhbeU>1J<%RN_yMQEAL0nM9^zVO@gPqP5b6b$Jh7E?L~+7{ z%)?D4<#DIsak+()zGaCgVPYtY7mxwLq=0O%O162UuGgS7ybKE)!ZR95Qx?z*6QZRH zAlIODb#E1e%A~55hjObustAQ)5W|va!!RAwJO3UQ>TGW)QpA`}UijdK2yH!t?-?`E zBN#nb44%@GXG%!89_qCc%A9h-WbJMhY)i~9cJajsT3f|Sb18=Vm)VOVLJef3URt#O z?E1vgCSki`oiW1qiLu}ss`vl)-jlYQte2Dsnfd8|V1Nc)^0@BSZZbLYa&pLjl^AjY zcCa{yhRN(ccJmW^!bYjd;B8YGb{Er8f(o(Aisa%0z3+0lhD^@Oe*%Y%CZ5P3vP3cG z;U7+670QJ-pO6$=Ltv){(4de>rp|LNUZJdm;|+D)+#g#<2Z-DLL{Glg?nz`ozjdHCKo>w;bsZ@mF;1-_jZFY(-0pkc z%)m!t)um3`(QMof%r{*2?$rso+`yw~zy2yct$RTLI}3#?SEz|pJ|@-x><+GP=68~2 zkEWqrLdDm{8M_4n9JmA8nB>@elZ|tas690m1FbJtu=#PYzpe@dA`HTir7WHfIHAiy z$wA)M*uDfq$|wyzBf!$t+Ur9R;VDKa7>q4Z&YN$%(Y7(Vy@t<&n8FNBVh?eGG2zOll&X+1#d_{AhjMGngp|7HJX`ojWU~DUxbs~c?-?kRQ=DJA3WI-9TCK!@0lwZ%>iy59l>lAoAbp6 zddz)5j#`KDSUn^!BqattEsoox$(4UMig3V&Fmk5->rw_#^_6sNO7uyGCqR~svQHdw z8uAq5curAa{c`)tA+!!ts>IlU+2ca2kyP_^P>9Qf7eW%zY%I>WzXC=O6kP#YAO2=( zVfOG_$q&krjBvJ#Ar4=m?7>7GA^z0))TP46eKe~F7>!Mv64t9!M2~$1M+Pq0RWpk^DxI+Cj+E0xQJU>VBBM z95;rY2N1i5V+y57t9WHh{H+rCt18HkoJeQK`c)gO5f@?l_0 zKCDq-!EmebwRu9w#>Hty^I5|UeR2=oe3&Ph8VA5vEQtN%(#t) zCh@thJPV?uZ?lb<=Nx)GW6$dUX3Oq!=mTc_WdnME*}z>F#&z~HLs7-p$D36}Mme`3 zEKvx)wcw{l-Vb5xLF*~|kI6^(@5FSv&QeCtTpj*D}uk}p`VG}hrkVJIYqaLdenY;Oi^mn zlMWD|CTlOE)|L+iXvrK^He|DH$(+PURu);b>;umT?N9%>KxBc7cZ$=`X4bn4(5D8? zfXJ~jA^%H`94Cd&kp`#Msd7dYLUo%Sbwt)>#U7I#Q*El;=CH+Oe=8n>_OLWLUtG^( zc*2P7p}e`8VN;O-&rk}&QCnIZU^sgav>@&)_h;>OjF?7n?*rht#DUhvN8$!gKd9E| zeXLYvS;7E{8ubts!5dQsd#u!dJ3N!?6Wa3S>`GaDXr%u>$1;G57cMqi$r1i)tXwcm zBp9I^coWG;ECXS50~5+mu$=J660uP=yySLEdsKx9h5eX#ORX_}tWy>$j(X~l%DY`U zlYO@#PP}EwrP>%+(|c#2QP%t(JMi@oUG&7J)gf%QIWouunmS$Gip`Tu;ci+xFWv6& zqGFTmlW4nTa`3f9jHX3K;2~)(fvAyz=)!TGNVU@P##c_IqnUR*=T1F$`WNJ?3GZF@ zT+a^t8mKXU|4*`bWtnWI871qvUb3?R#1+&bAj-#l)kDIP;jpM0<->GY;YoM7rnBbI ztrRt<-6BQ88r_JrEwdSiG+g2$M=175;>E`nxaoABv%XpRX)_yms@&1jiYMt{o-(Bw zb^1PgZ1`^)FyWXR0STVHExuwth>4U2HZ0E)*u)e}FeEVd8JPB7M;8Mj3$1HQ9YcYT zyIh6RL?Z$nmBTKRqp4i|*41|1=mFA_RnBp76em5g3~9ZHh=byg!b$7pf+8o7==VT+Tyg+j+z@|=f5>6`s+M-CK= zqH}tqw>A&Jn8u3c<9R_sYwT)RL>-`M05pz~C5g4>qjX6U>Rx}bO4K?!pD34 z1uC}P{U@#XFfQ9uckK#-Foc*S9dqvf_XL^>c!q}tq}X!}E-Aci69U|(%5<1fNy35< zlka_8)Kp1z8Zh7NSf_z#jz6_9Gv`W(8iS6|G_`OKD6TcuemN+Ib$Q8Sy0%6wzR|3q za^I49l8LYPe{{m?VE7wSlsLs%~`vvJVb%*2N9Z`oZkP zY(>0q14S450skf0gG)gqq62U77l6qI=mLKL*yyPg53sebQ<;ad6{)Nq6S4*kISc^9 zMHa%LhtUiV86=*)-E9(6rkT$<=8Ay~aIGFbE&D$8JDy61h*6K7mlxE&2}2`JBB)Qj z;8y8D>_H!R5qiJE58 z8w=8Rz=`(Ayzj5BVp+?Pz)t?sz0Wd`&odfD5gX#BCrXjdZ;ef}ICh`jwz>o*8;nOw z%dorDMMw8D&*{B+`y3Tjq zFcGXZ_g``WF)OkYkWy2J2R0HQnirtBox)0vc^XHH3Xh-cil+Yl+kuK5sf2Lyv3ckw znU>gp`0i{Ee6+ZVsdLrhtB|8%pI&m>eM9s~NaS(+vLaAAKn$ZI<8aRDmgOb2kAT-| zP*+bjV{1N-j4iSA*+ETKNfS&nxPbQO1h|(G_W3wv>9Cor@?1|#0lp%pn~mbWnl%{L zz*Ejb<4q7Mdx}<-x2uxcUb^nw7Moa)QK2U9_>~n4aY@Sy!ec@wZnD|BBubKBw4Q=_ z3jsqA??xb;({|#FK#+RUY`V#=Zq|6X@_fl2E|~jQPtyeG0&WXAcenl7kwB3{l61aF zpLC%vWE({9px_}v$DFt-eGtMCOo&~V25iwQrqZB78L^K-Q&1<}E&EKG(&t9fcJ&p} z&%m7NuH*KLatJ}~ZytPy;?c5-*{Bm2(<*{J(?=~LI#Rl5mP?q*W@k+p8KDe$go6m^5Qo~OJO?AeH~kMEW$!Fs zhPOtotFI7$RkYfY-P#vZI$waiE0r^b@!ip?C=@-}n9KNzs7!UoBk_Ah$V=_bmo4W~h7*+> zb+vpW8{v#;)TxH(2mSKQgka2V)hP`??Tx)^eu|k%l$s=+#iWdVRjEaPx0LW(t(2li zXjI>yIb|C~IPq)64;n~I5NO-f;AROVz2}$qaBvs3bK}KH)5K0^J+d+}Rh447I_U7o ztsGYfvfR61U)B){%~#$O!BChQ75i(=3qP0_ivnci|0=LkURVbnx-Fm3coO@Q ztfzi!vi5SXJD+Lh68ySDX(_1(Q&x*G6gt}+ZekC6%)JKJR;Xfp+!RQmDwgE+4No0p z5f#F}K46CV@=StvxJG*6gkWUg%TX+%?3$2pC7Nnlop4jz3>1rBzAp0KK zGd-cp*r(w+t$!7loh20OJXN+aD<4z|_!md1@7n8#Mm>)gHk&evSrNkS-N3#b^+#s) zu2m*Qc}J>r-T1)doZIGDr0XmWD#?z{zC7{k#_BHpn?Nr!#7A^JfADk(58~P%kUN=d zj&Ic}R0Bi(tb4ql5i&?p&9A;rti}#$7R!wJ#fLSGPC0XuHaMEH>N4G9HbsJU4oMDS zE2CCC%#{i!{9&f-xQ8BIv==vAvg?_Bsr^LwLip!3&qka({z|we+?3NmG7_fEkxysu z*c#=S*d_50V-6~4lM~1b3&_3XL#GbpNRn$YZEMSI+GcCmAK~tf05wWg9gELdlgoR+ zv7vVRO>S69nWNBCb;||_FAX^vlk_EBbL&pm>RR5=8}3jgiaW^?h zm%y8lq+}8o#qB8MoMgG8)hNELGHh5lJza!u z(&ufSsS;t~Z~-T@6ML>!<@vco5-y_b8uWV%jWoD6!+Du)qQ`Eo2y2j+kgdI#V;ZG4 z0)UGP>&;s;Ig_Ejuluas`3fcWUTcrdBbm_IWC&`Jks;yjXN@4(INRFNA zyU5v~P)Dc&1#57v!#$8j7LWNg*i*PQ0~Ui@SfUyn_yd#xEp^xvBV39O#7BwZ1`Mu; z2KkMpoC=dNm{w1#+S21^oqJS8pfC}Y?xUxNcgUcU) z`HD9}z3kGqlwV;wiPU3*&nm>0%|XqkYB*f?(oZLkN>&3?X}C`%mGcymCXU|og$Aer z&N|tE+JMuoH#izL6ZlP@*WP90de!;t*Tb!DQCA~-YN``Gt)eeZ8}kX~fw;FaSNUmG zPUh4-I)e1-#uq1@DS9`qD^t$~JvtA>D^s9tMn6~WUXQyNUnW-z$wr5Gb|XrMr!Y_Z zV9N#40;?oP6CfrKkkBzn!O~GumKtMxUV92%gT(outo>YlGXT4Q(^Gxy33oE6Qbn66 zAh45h#!gP~7S}bw4uEAuZ468UOW|B7h$2Uj>_JJa53Z;js zn%k}L4pVUYK6)c(8#K_2Z2$IC{sc47B+FFk^hc z6gx18vXvjz3Yt6mi?Jdb!w z?APPM{?cQ7N4C%}`2F9xX>%JYGqChls$GoiN{onhVv}9B_=uAL4 z)&V)z5uMP-?PKi&5uh#vQ&4NIV5L+5(ml^^h>>!Jj7>L~#z=(K*%viyC*x@SZlR zqAI9dPp1r^RP$nA{l12-j@k<1x-}WeDEiNj3VU;!BhY~h70UVpfF|g_u%FAu9)|R5 z$lc#8)$CF4WiBZpisVp(*LS7Vwl_ehvo(`Ja)D-W&=dPbZrz? zxXz8_Hee3W^%vVlTMn>`(~Z}NXLq9FW76BjPfZ_z zhc2zvxxFbX&i<1rpL?s#5w~}8{6m;%DVO8>6hozVGPT6csw;Vzf8%2zlf^1EYcim~ z>yB}dNl$R@`MMdVSHp5YN+Fw=KR4U>A(bT}|7#Wm&z23Db zUG!z`v_gNtwM~fe{^yAyC;NXtF#P}6y>T+L|2Mlg*8ez^Wky5R9)}&K=eBOXp~pf* zDOsc+A|Ae-b{*c)DFya}ItxQq2SiaLXrEA1UIs=#lrvs_90HQSTM>$c@E^l* zp&ER*ex*Z(GGet#P1-chjEen*lfl|r_IW?}* zV==*RG|~l3VrMPdT~j;U!Kzjn9ABj@u6MZ%uJ_+`u74I+BjtAs@5=+?Wf4Jfd`U3M zF4I7i-qD%_#TBud1R?NQpi2MJRjB>T;o#b)nx8Lg4S4z_q^kFQgGu0(L#*oDl)t@| zz245T#o>Jsr)t^NV-8qVbu2&_Zb-d|A`Dth5jD7XEKd`o(NmhIYOf#dyqR)wNlh_w zrTks@bD?oY)PYq16O4HQb_z_n1pF6ldH}qxovVMf+r6z9ulz+OjJ!I?|Fl(}5Aq#RF_66rN!O3WoLr}}dnEmLN9)@mA(&E2v`3zz;$6j-j zu~`Rv?@GuZ9Lvpw?QWNE$ZjfKb*06$h!kk*cqSnXt2EgnLljC(_ZW#ZFo}zhL-MOT z;J#C)Rlrg0h<8Sk$M%i$(uIYL7=xMwc#Y-}?r zF@iAIfVo*ZGqww|7Jm6aCj{qaIM#vejz2;zsDFD@w1;-ZTTrilZwBy4Rvgfdwsf+< zufY>%;1X;e`H*bw+WOU#hi;C~&JZ+e%qm$S%=SEkQXN6&d`rRuN(f-yT)RK^REV_- zGQZF(4>ITN9BuUg;S+6Cglev>_hX{O?U8`3Z#V4U2^r`tI%*r8V5fcM&lMSp1{4uw zlB-09DE7VJzeHG9D#Pqv)uRw3AuK=MS^~=HIoO>r@9B z2*Jm+iVl(qvSNu9bQFLNpl-v58YceIMP3uMp~ZMGrbsMW4HCSUida2U=F{v??TvcA zEn?rFyD~PdNj~W9TElXZv^u=xHphPQofp5;ecjKBFRg;%PV@unBK6n&;&*{>Gz?Hc zplM#QK#C~Ktx%$gw=Ul7V6XfNreLT1fZ-CK^#5nuW@P-|@>y6|IRE3me62gbbQQs%mnNeJLuN|mPm{80Jw(%4jH1GoG3XT*4JGpG1rk6u8+X)5*l2F=vv_OC(F zhLSP?XdpijfrWaWn(MQlef9lA#Lwed!0q?hb=IvfNZ%wGI80R=zWU$n0*NY&9LeA4 zU*G4)cl@=qteLQ`nGH_F8vfmEL!G_cuZI`=y)TLSXKi>ez<-1%>TX$4GvFPUGe5mP zkGJd(J-P#t2(X|Y{_JRv7dvU}{69wOw{M4g>C}^!&*B}=Q;{$Vhw|!GeSL3!CoQi$ zLiXJucy;=8yFR_$t7n^Mo(F`i8_aGY+rC=1=zg2ewR+q>ERaW3NKAc#nUs57IMFAo zz!(pXE+2-^30bY=$l5bjKX&{ztx^1}b*Y1s8QK2DT{{rcQjn}U#hPqVL z`0bfW;w+p_{8Q9oLp?jahf__?BszXqD-G{&IMqYXI~$xL8ur2a??RHwR(o?pW%u^X zgYTKQKstLA8{PedpW|ePVBUv&d`4gr>4M{*I%JkUB_(k*^OSWn#)P8Su*Ev>laChe zViF7P;5qSjssnW#4=FuW7W&&hWyJ2tNtb<`=Xz#(Tr4GvJ+CDJhGB5gEh-_nW5jDA zeB8Im0du^rwJF}7nN{hq?K&YJhMFzH|2&RbX@c2{R!aqXh`0NkVl>8W=PE=k2fOfHni=MrWR&%n;Ok{SV-2F}Db_F3*Cj1YSfpunIS zV6ez;pQog0Z9PkFX3GjtgYlXRck)%Mp=;tl5S#InsVG5+IeV8zn z`dYXv7k>3+M4jq`Mug-^jof6<79Jk<4T^Cryl6*f5wHd@Xj^TO=Jo5Ym+-?zsO^>w z>ul`A4eRc;S~P6^DylTD?E-%^s)dZTX;?gyaa2b#9xVF+d}kq_V`ZwhKXjPJR-o ztFoX(5tw2TBmFI?S1W4a5n<#rngC{$2L0rbgQOCc=h7=l#|bUxoLkeyin7-bbBg@ugm&C%Zg7Qj;hz)lQ8w>;%oO zu2(yA$#3#(G6kQ$P4!m1CL(We0DqjcCjVusmKPY_@R#B1Zpm34EX4+fYztQxMxNiM z+Q{^u(7d~0qhIStl00|7fFTc=296LLVM{&7mHBUWAR>1@&Cp~DBjItvJpsAqYF-hk zVu^(=BQpc$yad1oN!4}<3!F1i#`Jo{+B~<Q^Dwy5M~5r$X(h$rNtetJzlnZalXnr zibe!?YNb|+o;SM#Jhe*Vkv4d(H)`771-90NSy*w?3%o}hVL6+mUl-+?$tw7lNOS&{ zHw|=l@>Z%QxuqrJRxE=yv@W2_pe9&Jtti#H%bQVFGmI(|HCkR(4Bt(OQ)tU;^KjiJ z|AehC*hyzvtVvb1QYC$)FO-H6uwKq1| z^#(Hj;MdKsEn$NW%pLf`B96<4LGT!I!$)^BHOY}eJR&T4Faj)mtHNNg6>1z9_Yp@K z4pmVORT&mh!(vrn)*hyVMc8T$vcJ|AhL#*Rq?ZjVaj~D6?WUuQmx9^LTS@h+C?PB&-aJG``DTiR<~klxG^*aSwlem& zU+++G&0NgahK_Ekfa2a|#`dx6^rdKpYjHJN74==jGj%EnRxLd18s3QC4*_^Lg0;Oa zv@_}|hhGRzKE=CBNHKV+5%~b7De^iDUHCd3kz?#CM46*?iDaVr=LF6cVWn0fL5{6n{FU@1@_HC*~6I5bjJL(_^f$Vp-d6Q7g%Uu8FG`e90f;|Cf<4<;vK# z8L_r>bCT13jL)jo{$KFo$|4zO!tDVL)hC%c>SNZg^eIXTVj>=C5J{fJv$!SGhv zi6&iXjt-DkBS`c34;LfZ>UUajOK~-~V7Q7hC#i~=%OZs!)xw-oB`~`rF=gP21tuiV zubI+BO(MM%U9wHG&dbd&Gn9BDcUWm(5M-KVLBJLydeyD~9WV$B5cor+|BAu1_oB0( zn$0z-7W%3Llbv*d`kpFxE`;i}gfP&+ z7z+h#2(?{t+& z4s+brog?ySh9n=w5lwU`|0yfN*@Ft*8ag3Ed9nU+-5S1QU+LSY3G9=jLUk;x$HW~9 z15{TY%+&}V*WJq`KV?3C@YNDAULQrJvX^72VyAmLhW)o9DSnNZ=^j~9nvG%25}0Y- zAkun)NiO?rd^8I15Sx#l8pp1(TNkhv)sr;R!m)PR9Zw)@=Mkt1R1F@lf%;S_C{GM@P8NQ$V{7M)dXkh zf=Z=@p;j$R>dsMi@I&!iG8J@g84~!}Hwl_p5ZZJwyv940>$J)4u8`61Z7I>>xSpeqtYYLrRRXxPLyM=pHJF}4eW&KkG-+S%oTvHNSA^qjlq`KIW06X)!X3jBbh^7&8knX-d zj5l=Kn!D%t-aED>R>yn%luh6!r}FW~0(wJTdP$IkZLOomz=^G(J5}sKoc5mU$~_hwIX= z=GeIaeO@B7yMf;NmuOim+9*Gr%jn`s9@>=>-2Rp z*;G5$uWehYWM*Upp=*CeRwU+B0FJD3+VxUY(2WUl7`SJ&5s2`z5TopPuTQj5E8Yvl z2t-A+(Ka)=<@2wCd3MFq;p*0g0?gEr*9(B2i~(>n{*TrmlH4jf$(hHyy9^j_w2qmozrW_1C9qYJ|$hL>(?+!_2s7 zu5ahCR3-*jIdcJnC5gd6yHnAL_s?b#J4!v+(BEOREH9Woue;A*_}}G}m~g z@zX9UAa>;yydmxf%nQc<_hhTXFOfkstGrd zg>c4JN?>ZNY%N3R_UVf!!uT`I$7sNU*cCBAZ=I|xJ0@o`0z9nln+SOR@LIa$6DTb@0jz)8HSb_8J>)?RC=hk=(Z_xivlk?x6{91;$fGrQ#U>5?&Vp1kz@}u_r7dAsU5I|F|YZtb;ngH6c5tvHgVdH zTKU2sx~}X$(pmJm+IJUn&!oz=$#gBv=P7o{SLI|nPc4a?WA>aCJsb%0Gq%hDGGzZ| zuR2UbH4-=F2`?EllFwS51%-k-nw({mU;&3^yRFr_&oilVJLr&ewFlu+i(jObK1eIR zs;Yh5M>r`L@lbKd*GeJp_vU!j!-BjeGQ$>_v*E#vcoMJfHvqU!DY5f1lLuldKiUwi zRCh`e_q@d0^=!|@tXB3>0=e5s zi^eC!5||_y>#gaA)giqPRrNRgcgE3jl`tyq@S5+)Hjmr`B^D8#7R3_PENBBx1|AHCck=A#iydnkOq(B2C?wCmw)sSFN|89` z|5kW3dHIVl8gP)Y(jmewm%chAmA)FVem~#8Y4;k86>oec(amoGcYW@6K)}JwEev*) zDRy}Ht0tn(wCzB;z3-p0)JN@Z7?5hK@-z~I_ec6T-OOXu?}}_?z{wM6gU#hT1+I7R zj5^bI$Z^vGib~f;-!FJpnh7tNs5S|%*xd0ZC01@IQ0|rC*fFz7pBI-Mi8j1U^XwxN z`!CZ@q#=}%@`}nr!W-RXY+a#vr0ft*S~@BJGf+z3(#EPDSSQRSWgbb)I5c5aj`zW2 z{%6S$q&^M6JFV~vlXJzQ6YE5ZUY;{rC3K(B>u)*xyjp{c=6U8>HLtbqk~_??5iq*z zo@K^Aw{Bt)m;EfQGELpC_$j47ceCg7O59gy;}qYm@p&76UdZ9gLtMn=MOC>NRF5h=yZY*mBa}& z!)VcIVCw4rHEk6T%P5`aG0&imS54&t|E@hB51f+)I!v;ZPzvW@@K%6_X-x;ZjHjs& zcxGd-CnL#;J%EM;g|(}cNiz^OH>fw{(HSiA$SxPOEbBKYdhItbZtlNhjCPC9x2pbq z@YEp?dg$M;n@{Y|H;Cy+_&RMMT5VQZi)*!KAu)k1@)-e!&Cm|*xsb?e>0>WOBt`tP2 zr^iArvk)p9SDftEyqOk@wEB^yoEetgidQmnH11hD6 zNI_?cRUZIbh=aONQ7$67uQ&pPETM=fQBw&9hRp>W1dAM}5C%Ks8w7%#bFQ+y>9wb; zbJePTf+eW8zGOf7@`3M%hP~p7mA&{BGb}VeY#6!%|yBGsM>JgWKzUMnuTK9qPPhgfW1)+ zv9{Wj*|CxU(?pv*D&=X|q<#y;>6F&Vp;=(2Q$s#v(|yr=1+-P3ESoPUDwmk)BJuo4 zEPkW%bvKz%qbjI8lVGZ5U&6@*Z^CfN{5(l~$^34#3Ox-p?wT51J3y;hz@(LvS*?(5 z%ZhEP2tv1o3MxBPR*IuJKfzgr`KG;5OA#n1H(`bLU?8yy`{$urud-CLr$#k%LdO_s z=*Og1ag5bVz~Oe~Y#3*Q0bZlAkHNFIx_WB&ku`%)Z0^ja4HQwAU_$hp%rVslRoOXl z+X0~U>Rqd@iIiA;s?rP|B09~*V&^MXtc!t*;6P?)82L{QNj^3SPb)QSI8hn(za5 z-k)!)!aTnpKXJ|5rXVO*-#B#!f_Zc{T!aftN2SHADW!dEL zHq=r{!*zU_B#nj>GaZ5!uBo~P##e$fiQIAce5<0fNsbj<>^*tMaC!3!dIn1gM;~50 zpeDDc zqH6lV!Rgo8C@58MBHuRs&&LIS=t}=5LblTejK#Od^UdIPaF_ZmR_L=5srb_I!Q*wI z{5vDcbiy zB?|0=!~7K4btI8IvyEw64D(>YM3b}iJ8*L{HY61&mPM{Hmet3pSscH<4wiiyyAqFM z;ACF$%Gb5w+|R*v$vhb?K0RGv6gJ(#gPzr`Wguy{N>=oUM^QFwhMRbm^Jrn5!62F%Y!$v7RSPU!2?nX{GQF{G+8&`s-U>f`pp-1SyRS{i3AN> z4VV>;t1+apJCK}Y047OMFL!1x4mkkATlrd4fz_raS`)XTgYS-NNjN5BFhp^{$7GdH zqGoPNzVS4E$?N*Qrc{nxwkiNE%Tsbj+E^gk$bAZ)iLAVkxGKTxQWCf#s2z1e@_+|M z*ztEwh&Ci34K?xJuPnDrzLKxdNTxHDEos4l%>wP8mxH8IZ7!2yXad;4B^k7jc_(i% zzHd8n|CmJZ;pe(Y%w*1HiTqd24dzTy`&IPrhbPHY-ye-FPeFI?TYeoKvFTpn!rhYl zEH1lTFsee{=Qhg&9(!UlY1gE`+T^{P#(feBLCZ80z9xFlm?Lj7_-9%1 z$)nkN2*M}@bCH2P3IWH{elCT>-5pOnymIurIyzd7Ujn_a-oJRUeB|#`T_goF*MX(J zRbcZ=pZF4)ZBoVp)7``m5VQUWRQAOdJztJ@$Im>4)Lf>*9Q9`pjFlMNqLaN5wVER6 zR{QiJ$MibsF>im-S`!U?a3m_L0E6+h?MnWD__IpoqDjm6qCtTu%W|7#^Q_#Bd>H-RX|{VHiS2unE1GE{faKh^ z)py|erf0d80iMc(;~8zl&3u>g=iU@L%N!aw&lJE>d(gXg zjOnX$$?nCz6i%)&x0x!KFgj1wk$+apT};#0$~g9Pkr4P=Oa9Si*{bAvJcT=YqC>6y z@gub6)xg?Zd2+=bgR~%kbiEvqIuOV_6`vl0>wYJ#p)j=}CEU+{qPOnxmWp0lYjQj& zeNa9BoSZVVmsdjZG=&3tDFy_sp%1AmL=9@HlMAXrh%+l+3wKXaifguO)ia>ngMOHt zl27_xF^ZZpx3~?PM>7M7kMXX=^+UUa6`P=($1# zMDtQn2i?fIFEm9JL~&nYwQ`Uf0C{EQh!>;q0X0VWu(QWA2$QH^ln7GrdUsnKtS0ph|S-S&6Zp^^&NyJ zvhA%rFX1_oJpk?6;bbUQ@v60U2Qi^((z2vmHW}_RYaGaCn3&@;a{S-ZgJ=|AgDVh> z&Iapj#SKlOoa=12OzZ3-NQps3k3a1El8&t9DLRJ|)r$UA34`MKcD72j;D`6^BFi}_ z(__4UXLT&PP7$78c!Pi3X!1DFZP9+pP{HWHP+hz`F1O!5huQ(C)|EezI`&XEUL^W^ zIa0qmbC_a zI&1AyQ?EL9PIXr&clJ$h?;0jO)W>aTa<{yTW`X73h1vE)JIK05P>t!Gd^6i*|BSU`S>IWrA3oY^NQU_hZlLQckYMN zmGMWo!Y7Q&*oHkjq7+5_ou+IA1uf|1-=79{%$;vy`tm7FcHKB*p)rd>eQt23!WusV zI}6@_oepq@SFDcm!JcT+7tNx^8^2Gs9 zVS+f1%%?lk;fsR{aynla^Mz}XE@F`kL^Cg`d(WK8DDBOhXU_ss+-m!h`KazwrN5lP z^Pf5wX;b7q?mM7Bm-$$JQtDR&&y`;dA!zLKCQ~;d4z)(Pb-BiniZ4@2DaOy0b zp6L8?Y6>4-n~%$VJj|kyfXVqoF2RTqMH5CE5W+~R#yYf)Lz@oRDozuGO9|j z#s%X%+o@k3OG$qAoJ;s3r{V8Pk#C`wN8|-zYAwO4Z%}$~d0WbXSXALx@wP%ZmM%as z9Y-T0<--Y|BdiX2B@X4A48QNYoJ&^qdBlZSvvtL`4 zVNRk!!+0fv_N6k$2l=0Tb?VR?P;1|$1GT>^HA|U;&9mt5F*1sPT))Ax@A&0yrlLD8 z;b)~FV+V8sXt1uNrXP!e5j0+?HW<4ikg)f7IAKK@p9$ZzeQhJT3?{_5D3)HRJMdjW z6Lr5tb-ncc^j>wb%3%l+#b82#tQ~#nFb99(r%NP{jaIsdSfo3v*gCqyU1={f{2|TW zYqSa7_b zMslNy%K;>!h)n~I_63R!#ededA+8t5?efNco~v)O*BKIYBxtrp-@mihG=l(<>dYg5 zL!I|#nfvhr%UUZWHZ867*v$|gx*i{9-i=uUfEcmt=qj?6Hq|p8C%5r0rrEux*<}43 zmgYC-KItG^OGsYUIN^mUJ@7w7_fCp@5&HY(@c&x>eCa$ZUE7%*=V%|) zcr>C#goKmkJKQSvDHWRnFo0`NZE;FUEy9SB2yCbG?mib_ze)iAuA4!4QnLD6E}J(z>371yAEHXyWf5SSe6v z#&tD#DTQl9&R0lMu4$}=xL35<3JV@-3EB$dHa^!0rOgL0L0~&m z*xw+p4zY9~4q%5u+gR%7O2)jU*ASQ&JA<|i{4=F_jhQj6=e|7YUvg@z94?Tb46%*` zDOCO(Ti!#2136>R*S!0C9r1#cw2up$v~$8K@hNGQTHyE*;VeOV;mmZVS*Lmi1O(pe z3Xi)Ql!>X;HiQPDvA#2o{#C~f6Fa4Lp>_g352^8B961b z_>hTs`MWnzoJiW87mI+(^(RTlIvkhC4;F8v7GtIOkZ^IEe`oJfPL&I6CHZYTyF#&( z7g8pC(F-N0a2|VCM0UP~a+M}eJ11GAk+QcF(c186ohGY@TTmUQD*^Q#Lp-lnYet0d ziPJs3J${61gQX{Op}ABf@7kg1B{itOd`||I3&@qSdU|7RGIe7vGo7KfFV(y0Fl$Xm zj&!iJY}RaTkQ)&t{t}v+OylQsxCA3Z7fz5!5C~wZ9_Fiwza!*yXdXk`F0NAmik39~ zMj=5+2+yMM+;pON@JU)6*F4t91{t)4fV0@s*uJx;)mvl_;JgP4R?%543l-MbmpGyd z=eBQA5|EhNUVH*>G{WZ*t8A)BryEWcg4|3BB%6Cc(_gY}$tk4RtXsjd0^j4o;5`*y zqr>2xFm@;YdBWZxzAy1={p^`pUDZ4}Cu|z|^p8elA58z=i=Fq<Uxv_#!p&Z*WI7M*k8S6oOt)V>%MURzmeOlZd3JVHZu)%Ycii2*2D&{LAK!#G~|1 zgEyyq`EO7~Pw-K-lQT&8YJ`KsR~$?Phmt$LnmfA+k8{LS`eDZhl6aO@c^l-=8X144 zRYHvzU>2ql4&1FlOe$;HC2g(#MytsGos`ui-Sh2XQ!HvM{%mhvH-t2I8Ru`mC%m71 zBgYq=5y>R=m2)3t05g@fzK!6xthZuF(5FaxL0~L`l#8=1AThOwZZceZ_f3IF4ljVh zq@zS$8N;X$#ef4iQHHfzGlg`7w`!qAGS2!6Oa5h(6jI` zHEQMAz0u6NcN7CGV%L$4BWmXuui+)vCIrhXB4bOMoVh|UdVucV--jdQ=!v9-BmBGa z?QVqfNut&cUZE>}ZD&y5dC8k`G_DaNIquGyT_?o&X%oUy{N^aItU9}bIY||vj8_Rm z5RKLo%0y6BZ?^*ph~J98qcv7hMqUm2G7ACIM(q;1!kVzcaW>HkN?c$lEYtb5dn!TI zI*N$BLlJT6@(b0i%I9hZ$Ns_O<1~jou6Oe|n{{s}oHb>WzEef%hw)Y8`7jzSjeXpK zD+K_Hkfxd-tNb8f-&|U^!^UYxnO31tX*!QDg;6-kJQyG`5Dev?48XeCdK^9TPlEi8Pa#;U?T0 z49Etj{P&y=D-L47sOLwau?kTrxsrlxy~;6>j>>+vlE{yA!5CB7lG^0NEvEhx3L)HF zJ*zRz;odN`e;+AE`|$9-d&eG9TXekv(EMlJL!#l=0H$ z$|{IlvUCj~MmKSdB>QJ;R5WguDHH#1)&RhWweV2map*HUjEEbN$lG$~;Vv0du)ME8 zSZahY(Ed-_xxG>9A|Unl+zqPR{{#Y8?FQ=BguOFq`%2GB_CDChleF1g>GPgQf7|+& zT=B4A)?%okl-v1B*6?`pUH!4|CdaPPlMM`{(JGg5+J557RDJfF0{dVVSk%h5acZ?S zZj`bwuHp2^D!#f#piDCqJ%R;ZWWvlj8zgartsa=@nfzNJf+Z&#j_7$j10s=1VOgjc zNL7_^VPCp1SYpw8Q?S_2J}+DX!I-j3(u1!H5`W&Dw*}}r_piW~&h)Gp`?`q3S&F+e zP+QRz-AKjRLZX9)N~UKT@!tE0yAP;>Auh`+KqXp$)rNNVxyH|-gv}vK_To*IrGP6o zB-02wfcpsm91@lB?7!Au1jw1@S6yQ-K!-*E4m`6S4Hm$@SUV%`0Bo6$K!92xPTBzM z1ZLR2<@`!O2hvI_pf*V9LQn@(uT7vfLHk}gY;+H5C1PWULlTePf&?e}Xa zCVB=dJPgsIE8$F#qW^uT#GX&S6i`@mGT}s@%QGMfsSuWf%4G{HjmigCg~JO<-CG6~ zx@YhP!PJ6X>H}-)j`XV_VQj`$A>vJeq~nSsm?s3}XB`O2mmvH=`|HF&Dmi|eoB0-+ z_jO=QahzedIdwIF;EK;TBNQO@0Q6`B)Zfkc1&V+2xURLag}XKB%BHh&zq776bvb|p zK&k(7o9{fG!PZTtiyBS6uSB$a^pkbs<#&OQ&%0>D%w!*D9r|=el<9SZAt$vcKcbSn zpF|V^l*uImVLir%nQiGM`Q*tLiVraUiv4BQcW}@wbJA>dM3SOXm3o5UBtuR1Wu~aL zej&|d^Exe~x=tJ;K|stv+bednf zDQTnjeV48&j$|z(vDD;LtHstNmjoW7F&>sMrk+-3^2&ut75pQ>Y<%-z60;?hv{Esq z2_Iv^i}2Wm2HnHib4TQFj~qa0f==hfR?N_G|^m?0Ea=9jnx;;QP~5iD;wLMB-q) zi7uo_SI|rgNiDCGBl+-R{)^@JxB&OEo?{%nB`-6WO!heu?Qcd2TOK^QTz)dgx@Z#r zsk}et*ZQAWf9sWnQ)FtL!Zk|BiBpv&Cy;*8@cK3N4*xAkg(wnP4wqcLY6!v~e z2bJoRcL2KX33i({D0}f90cLGHRc9mF!>F4iDf!Pl^Rd7%ZNd#uP%~@OxMFQZuSY9` z^hGtaqy4mbDV$k`aU#16x?M?l+k~WM=w*$qqI~0yA8q~4oKS__RZTgZbB(UoL5#C& zF1RDPs;EsC$XsJI(NTi`3KE4eW z;R<1{_9T;M#4QZPw9Z8`w z+_Zjh;-bKYQor%|k6!gmy|^~!j*wgbkf>Y3yw8zL6j=VVF%V6QL!u=Mdl~0`e^CB3 zAw+}po-&Mut8az5jr)evos6~*iSe#rb@>&d-e%L44nJWAQc8D4eL%!4f;~0P<8UbH zX5-@IfX(uwqzpxJqB8a@NG`EOjr0zaIL3~(%T!%w9DrNsuj53sO z!MTX=juN`7>*-fKPQIitHuyecbyJL9v5?vcrHIni8h{j zif->*(PO{fHdF-omae6K&zynY19fP`P3yPS!~ncMA#e2A6~aUB7%a)`09QX&ym3mf zB0>;9U2GF2nPCE^OIv@Y7Knz8LUoVE?m9?2lje9y=AQ6KIx1I;%HqcJF%J8#uN;ba zjBU?0U?6fS-bAD&X(9mY<&5FTp6_nLLmk6-T2dzl zp2=lNh=VzyH)ft9K!LR^IrkUZ9Mf%92l}$tKT69=Con!5n3;4Apk#RI z3l0gwXL@b6WXG(3(l$GbrJ zadx5I11Ez^ImnH$eM&GF%|rt|oFWKzESygra^ouM8Iv1ps$Ps8gkNlOe;+ zr_{I{0}nkZGY%x{nJEWTz8eh_Qxokvmaw>0I*}qHfth`vrDCW7ISpV__QS~XS$J}E z%(veaN)ERTY7BSsAePF!2zCyb$~8j%z-ZgaO3wr9mv3Msu4^YUn$L&fuqS1x+qcfM zhJZ~2E%eaKI3F~MZ3EkRHh|$r!kP&x4A@bJY;uaeA3wnddJ;b$9^?^MnGXj!Fx>8Q zOwYFXf-}QvO(8qJ+Z=ck@n44gS0NW=#VTU7i`V=OPJE~*8qvcw)S9Lg}Yozw0mB6s6IyS|SbZK4O+<$7+Y$;#-uPIOsp_X*HRf@j!zm~Afg5}>dvzkm&%Vl@8| zMEdU*z5ip>p5uS)To9`vYpp8|v)!xDIO)dh{tu34HUN6>vn>cs@R(omNF<9#!uksO z->|)RvH1qe7MiWiwz00HI@f}Q42za!sD%RJ^RA8>&#MqG03{3X`~Xe_DqdjB0%d|` z2WUeS3vWU%;l)_U_Ays-v=l-28H`BOvp`dNXMv^ZoRi@n!@wz~O&7zI3fxr0ZJjt8 zD(Mbr2v4w}vK8QgPFs+ZTn>gocxW3GBcrstF)p2;&7C)aEd(WWbxRP)6~g`Sr#=HI zGlRPV91Nc`2pGN?ph5V?zP*2_{ho38C&3%WDZ`#I6h9b?xxrn%*S{fVFy?pIm+)g2 z7#s9DUIHmOT@p&g8U$~bFvLhEp{E)Kc%!Rxk+9XEo)NkY#TUj}D4w&<)9wL3{Bpn` zHN03gi2G6s=|doa0SEJv8kQ@d6=-=b3&bqJ%y23rGAD>d4pXekB@_x0071qk>v*gD26VGj%YEk0-fe2k!C||&#;z=%We-t`@_82<=)>sI6Q3Vtyrt5BrM-cwK?1SrRA~|$!;1` z`IfL5{tvW=lh6I?eXwyQ+{tdx)GgPO^K6RhAWK=Ms8?E!7$`BQKNo2ZWG{+T9c!K*XTul@`qeiItlJtGj>5y!S>HL-<`#@ z4GIB8se_!R0{^%eAQr6bO5LlbHtT9POa zrZ8~^%#;*NtP6^Y_@p1cUslN=fS`EN2S>ftj0$<&%J14|NZL^qSZ-2mo(r@0)ac}SFLis0!L$>@(Vy6NDZWZ$?jf;SwQCmYNk z?#)^N#bg^45H9N#rgBEDg@*x-2_^g?jdj5|MuYL{eV@I1)wZ;<%}*ys#TIE5)T-0> z66q_>o;E%{17!QR$M?uX%OT_#8~R&0dwu-dN!N9~o;I4z<@-n9_syT>JpA~#!K~f* z@M}&VT>D%8cRRc|xXr4=vc0ZJS+tew*1kNciiK zL9b|dB|+Q-NQZ%2>`EnaFeUQ8S_RK6NUt3>yE(OTpq9TU#68HiA2sAB(ME62M|nnT z?IV?Iyzc2Q_Q#_{pO)S1rmrcC(64CAy2o~F2&`3Il`*+0V(~L<4XG6mJAbxS$)<$H zOXCzprc2|>FDA6?&d4QC)=xk@lkhG44);x_!lYp|narHwkjYcHS6h-$Sw_}#O>-RU z8qJN#YX6w#7>X}tEDg&VzcOs9<9&v&=QhC8PA0*H2t$+g%Ac<3f4ZfN`qR93PMoAQ znExv`_B*B0v>G8@>1n>EIJTHC#$4KJubb?#%%^_$gzcmj zn`U%Ny@(_R?%+vsL9>M?+M@jC39p(ofBVC=G#DCyTCAVP$Qa=HDqi;j9Bwa;{D;KL z%=q71nE%Uuje(W%e~R8uYxLU@|7%hHq;|n6Y8FyLB1N@;2kiiTSy}Ry@?}6Gw>CJ; zZ<+t`qqH2cmNmOJ;iU{B7%bpP-SIAzh!f zMb)f|WuNe_3RZmNc3t$@sDAxiw&TyiG|v1iqkK2}r{=-0=gZ*nq#K@zV4C<`mxDZ?&R!yksKBO$d#bJldyLnLLR$0h803u$Tm}T zEwv3D`WTHXeDl)^f3enW*E;>TfeVa95^B8}f`&rFZ5E9Zq9B#YSm$CWpg_#*fW}esNQ-uimq-k=6k87R&$5Q@5NG4&A%sqNg zn}TnoxWLWQs8nk1N<_6}PzyKBBBo)Ix{O37xidXDolsF8J`qfHQM0G05T9#=1b1|} zunUW*$aRIj`8%b8W7pY31!BdO_aNOm+SpY%B#v$Da=i7GT9|5-yueX zq>`$G3h|C=dFt>cnms?jXro)Acp$QX_Z4ItJ-`ZRpYeSd5|u7}g$fK* z=3J2z@x2YB;~n8}+iPTw4*%(;GF~rszF9Dvfp|YDw;iUnPFB|!lRo?&(n2T)LS|kW z^Qq7dWGeVY=7X3ftYEUp3HO9mL(!E{+VYu-TC#{hcy=mNfD2TXk%$Oe{kvh*kfufp z><@jC6AYKgXD$iod0+sS@HuC(3Ngmm@z$|Wuu?nwx04)R zR&QUR3Ld4n6B7i7Es5Yx|4~i!dl^h^k7Bk`I5~~7x0|A=U@Y5GP%}phs6e!%@>DHM z3r0NRDT^|H1_hKRO-(h(&1&eng!p*QNN>}$9jGiq`y4Nz#rd zkrIgO{o9Km$u)G?D~d3m6}k_)@QnHPX%NyRbalL7c+7RI-NVI{ zCWV;>`u9@a?w$#D9*KnDQpY{dg%;Qx;I8?FSkbI3+jHFlo(2j%Zi#R~YTWDiBqx$> z7)vLOgUw70gp;dLgyEp&nR)FJnD}W)0XLsEh^HN9Mo)Wt1yR0*o#p_0$yAa z-&7@b<_T@laJSNz(6yaJSI%4Mh^uQoS5hBjC$?;@qex3fY80lSLiiwij^C|@;mCSz=l)Y+$v690Dc%3m^YZ`zdx%V;4Aoaeg;2-w|<4e{}TgtIcE5Oih=q6 zPeo%SU}Rxr`!A+169F3oE7O0S{fqd&rUdK^jQ?{AusgU)^5z2DLP)-nD3@ZOFrvg+ z_bU}{Nf-jb9}<#8q$q-J$y?P5s_tNkL@ELa#FAhXN-8OOAbo||?$@nf{mW0a6{(#J zPqUY)o!Q1!?3pb0*f-ScL^lRj5}-+VGyqA!6jxW)egXmr5*h#?NI(wG*nJK4wOv1e zGD?`(Kw?Ct-#`ViK?02~dC;I?VAn*5{1sqz0u2lZv}B-Y=|BMiLIjBidjcd{P?bQB zzU#maAOTtupfErODq_VQi?$+UwBDKBcmX>Kcmx_sO21QeE`@p6urOglhqDTTSkMP-14Fhqeu++&X$0N#BK@_a%VU}5jRt3Y&O z;AaB6zx+jz033lMat>3s0f-BLmym*k0UqJhI8ed{ca-o5FAOXQyh1jN=%ITN`r`-`DCc281YP?O;`zW^s9;O#i->(*hPMEO5TDQl zL#V++r@}l04(buOcz0E<5DK#M01*B1Z{~b3D6ry&j6fJ|m%}kZ=%#m@)lq-d#X8#i z5j0@-3i(kvu)v0IJ6rei23-XScoF&hwc#8>x(A0bUf>mi$ROH2fzwMT@L_g9-&$u8 z!$6~gNQOd5MFJVz38tVgNIdET>e-=Qs3CeB4$bc#1ql@ez`rmU_}hSCeu3}$1$Ybu zXg&a^W>5Knf13ad80PTchJmgP;v7Ksc9-w%(g*Fa{eLXl(C2_c%J4BDI^Mo6$Dw8! zyh#R@KX>o+#c3>DqIb)CycG4?zX;ggADGH27kE5ps~Zym-#;xL?x? zHDEvfX#=%BMw7j%{j~T);)6W~2?8b~OO(6(b#`@_G%O)%B>$aAfEicYC}>CcRS0Co zY|(aIGGpwg;I@|fY~L_J*O=aDmz5v?W-z}QjGJ|W^{#0hmLq&v6J$;6!`-Qo6&6qiOWK=Fk&2X{jbC^ed!mxR#W%1#qbXoSM z*v*lAlO){Y4t)!en$;>yjuJK}tryFZKL>e4ZfTA>%_D&ES|;4OE0_9n=%Nr6t?-(c zb%(Rz?lI7$g&-Ku_(sX!cv^fNRanh4^)PEkliI(;%!_iVSFCQ)YS=H%ozBJ6&$m)ErJ#?ayzyXktM*yjM!yphZ8~{5 z?_Pin-Em!YVe|2)kaAReTMg(Nb`LQt-kNNsgso)ex1hFyv~2=2lDk#YkVD<@xPVQTaxr4Cg!1hY zcpvlmGjHPTIAqm<3CWPy0_=@d5Hl{m=CFosjdLSb$iT|w<@=;V@1;ZJS^c0`B;cNS zuchWxp;)}RqY&_;BOOQE^>HoIV{dWT7DT}cFd-3Z6p3`Ub4hbk*-tRI!L4s%rRAe^ zihhh$RcIIDgpDe44SFI7&0gcr+&**VoGk{eOlsS=4l@i_(NE|{+yxqXrMm!T#fsA% zQZ$EC=12<5o$VRxSnRU!W~zK1C@CF{E?0u?*p;}G+{}d2;n+QX z>pUGnVD8JH9z}fyHam^la0ffa9AnN8V`zMw23 z8kcS%tvDsYG{C4Zu2IRy!it2pm4WiC3VZY+WBr%BdX;EmJQ9 zN^ZzR)z-!#wQp~BPzw{aO*iJARj~mK)Nf9+@8rtX^oas7;KhSc176!dL2F5d6g@wHvCRUwZ54$1cH@L{Qr+xOhyIge>@e2Kb zW}!)=?Nm;7kb;|*l=OqQwP)|5iIKd?j>>RBKFo}@B>A71J|3R(4eB*Ie+57+Hbp53 zyH2N`v$D+xvfsm|$YZ@3Q+S8;@L1|BzJXGg-#D4T0;r zS=>xJ6=*IQZ=(OiCPv|u+|H~{Wph(Mm~C*yg<r#|8EHU_PR_DVOkzAOw>|cxSCCSvPCtIbwP)59Z5Q-{Kx9N!m&R z7tdc0e#1cT4{@r6n(wBz7n6>=*zqTUuRh3IZ8!J&ZQn*me8hV)>Som*P+M~w?-8yOg!D;tDqWEg3*Xe_Oh2HzJSlvPdP4}e- z0{c;xv&<@<vZsJ4zD`TgC&;!kxBXcmEr79px1wIaor#USShAE`0ez{S31v`nQ&=csv z!0NzLEht;=ayO zr`>!v@i0$zVK>%I;O|;!FpxiR$SNX9?n-(Q%RU{3zFJSWpx!G;-hOpsyVWfJ`Med+M&j`xvPFuxyDxLQsss59dqOR84>)wW&%JE&yC_uO- zPNJ(zSDq(5edZh9Uu(@zP0tezR)jkLdeiRvLqQAyFo_vy+Gd)qS6)hVN32K$?U(~k z$i5+}VC7%FpK=_rF;XsAiLaK0kju}~S|_5R6yp=N3st)HxTx$mQ5K0V@pIiSQR{n{ zNq{dze5akx?zK>r_T@ZTBF3t6GsiN+W`}t2@jTID+c!AZk&vIxH2`?U)g*^nimdKq z^2(o@_9u6moAZ+dwyOT5Xt;1f9*+!Ah!-q4L*WYbkG0Jz#Y#PS_eHkD>i}L%aTW>h zfg2G}$Ji1O7_zUk7jY(bM(L5b_oRD&cPc$o@;6IQPL^ipqNEKBZzrd1*c{s_HbObG zfkye)_*wMs@~p@SyM+%Th~2Q&8VRbPE#d_~;J@kp@CF4f`H(5zs|?5@vbVo-Mz8g# z%73glb?^h9O9)9)TlJXoKYI}uHF(W82Z(gLx2ME+p7@poZlv`_DmGKk;K#gfY|yoG zNkb|j>=3l+BV#-GnJEp8d(({AygQcZS-LVhQt6fY8z0-TfJcqB)8u!XZ#N=i4}jBW z1gD`}@Z!%}zH!3&m@2LD-r+X7)p2fe4&74rJ+P_?dmcWh{UU025D1t$g1$B6ZGppG zYIP*ZsZc!@2erEzzb(Bs2gp-3F-<)qJaO=6cc%MY6fkLG?Y6ek#L^_cV$Ukz2-M=M zBp6L-!7ZOcT46ETf$%)CpFo93O4UDxQQyg^!y%NVO-?HxyHo&-KhLrWf6;&Ie7TCD z@cGmF`nn3}woHD6E{?+DrA1AVakPhQYkU;|jeLw0qT8w;`+s~j% zTe*xd)85wZ><8F@GGfZ9;~C>5Sv^AYX?1`K==P0K^(=>*7zS584gum;VjH??E4u%g z+;-<`7m}a0WM_S3_8wV`n6INLyVU3Ra{f6VLI`Vmme8;f+uRix_s7JeuN!mnsN-?T zX}VY!NyZ%KqjK>X4SlklQ^+&I<3@cgPPt(^1hXHBOh|>|ibOb6p%$hYMwimj9@dxX!UZQ=DEO)*mZ2t$ z97`K<%QM>)Nu$Qv@asX6vP$v37u}rHZEJMckA-bXZ>DkPy~(+aSO=eRQ25EesL^v9O3P9eu0?5Kb9HxUG1KWd*fYKjC-3*OGt<2M;=gb~M-6wt(2mK` z*O7ZVvLr8644ffDTqKf6&ulD4+d-45$jkru5UspyE$1YccGd2b{zPDl42l7RyJ^4X zvqm=DfO?JDxbLnh!8J|Nrk~;6D8zcro-KzoI$Cs!HwQz}9K})-1(jk@s!{8nTEG%I zCakMG*4?zKDsW+$GzW2qhIg|c7<(vVf2-dc#Rts*@jkpZ5lTijm(!I4QTI8KToq4B z$Po5y>aVx=j!5l6kt%mq63-9Q+Oc_IIr~Y#lI9c3?l}p-0<~d^-toyzScH*^`(i0U zaAGdm@z)IXxoQb{N(q;5v7U8j7^-ex!A@z2o7l}8Sp}P!z^}3O>(fn*tFM=`5&S&- z1+*ej6M-=DS8}E-or2gt%qs(vGpzWWnerUUCdMo zxnw>H)GeL6qxOiLs>zH&=-z5?{=f-@58Zqj|61bv@)DCJf~OeTa@rF|yW-u!D%UKq zanaB|XWF~BTyS1YwTZ2Qqi2y~5DJDx-t?(!`&0UUc4S>TM`QecT@`9LbZ(Bljdqk$ z5%3B*2VS-#OBNPL2QA|G#-7yi195_G54`_J2<=i)?fbUN0i?cJlxYpWvs zcpCRB5wL_vL9!0ZL@NJp;z&o#?7g{}eZ*fUH1yTv@)R7~5@tQl>~F1Umq-ak{96R2-or95nnw&~7q?ff|skyqgRjN>_NIibK+W+c$6? zE``z`(oBh`CpY3l55;t98gX@1=vQ6csB07iFdy#Vg|Peii0lvu!rT2hsE@sIFaDM^ z>y1nNX4%+ayWRu?t(X}}u?neXuNU*vn7Jw;O9~`sZfR~)*4Gu{sAezQ-d;(jQ^u!_ zOlggH;)@3&bX>%AC#rVYmFmL&wnT2o3*wNKcXyU~Yg9c=DBCS4nmvhn0NqzDYex=Gs-}Bll1-MDZW`+Ykz9fI*1cP@(Bmijb)YH{pY!(2!w<5L=@7N zTN?_l-D<0AFqGjT2_<=6sIC)2r1`PG&ao=sG;l<0&x@Uxn(mSv2d&%@yz zkyH-EEKt-fSj9socOJAuNgFx}nstCeAw_j-rTB{FD2CKS>Xwu-_ zdR39gw&=PsQ#Z8d7@&i4%HKa96|6Mr=F?n;2ov-q;7w8c0oK?UFVXJviGtRu+J~y^ zpYzA^B9V~7657ZMLfwoSiKkO^Q6#y)yn&s24qvvigxSKunz&*1;bD9SloA|Dvo6xz ziYi}EGmcVX#a9Jg=}sveP~Yr?6)|<&MC+k6bbe{#?GN!Uho65@-Lm=)3NDViQ-{5K z?uGDg$&jD4OS>{DrB2}#T=^d+(C^gq2-C@)={-gU08*|B@?1@axY!C8a6P&$-n+mPZtF} zi|q7a?{y(O(3Kf5o*ROTX43nUs)R>zc(kshr*pkx&-BJ;W-?r6Yo4Z4s`zyMmC3pN zS01ZXa#{8<*$lHG#-v|0$gh8chWrgTbZlJ|L-*RyN!FMCt6yhccjLEwR_wZYGqd)fz_D-)vd9ITzqMs=lUcr2aG8|lwWka#j&?%&6T(Mm=z+p>o= z7r9j&MgAc|(clj#bG@atG$h3eJ{g|#(~Dy7r^KeRw!OOox#R$za<|mq?}a~!H4msk z;s-YjhcQ4OMwp#KP$*E^+YIblk*sWst+1w;-*iOzx5N7>d(RmkqldzeVk2D(fZ~w0 zu3TC6`I%XP$YZ)XiJEh-{eW#M^c9-WyKIh?ZnDywvyjF{v$L}dH-;l6HFEJobIRD8 zT#-6TX0Jq@S__AP(s8rU7cN)Fg~S68&GhDasvL-Z_V3dY@=^zqeBb(ULzkkDCS(uJ zJd=lEZrQ}-%426?0Zpv!67^Nmy4^oKmPa3u0qC<{)4Za)P&-%}Pp*>m`(cbu5KL2+ z-4?247CI6pm)nL^!O1ZQA{MO8tCBDp!|i4IduYIjY*M}j~f%c ztSXDN?HzNN4ljOlj_3DamD`3^xd?(TVslg*z@<&}v=&jnmD|md#s$E4b}r;~s#bNU zXDV;ej9vOR-=*s(|NK91G@iYD z`jhz;SSKh5N7lz5>cfZD=~g1x{YtL5 znvy|anxSLA|GyYJrx;OyFiUsewr$(CZQHhO+qP}nwr$(EZTH^YWH*z{WM>}ht?Hrj zC+9ooKQ4HpRYTmgSMP7ujPqe>s z;O9SfK`RPXK?$wKDUNTn3STFRCeBz1)-O|k?S88OG?KDMaQ5`Lh)xDcML2nb5Ref3 zoNaYxVm$-}!oY9$ZWOuD`fj?voy*}ZaJ@arZun*q6Q%*+(^j5zY3+v8B+i&1%-eBr z%-RGxi=+Nvx0D{9!mbH^s2vHB!r+obXlAs}cHC*}3ae<>#&GhjDOsOFtbjJ~9a(53 z=BzN1m6rUIoRB&MW!V(x;^&?r&0E?6F%#8vnCAh1Gc!lSo19=-aXu2@VT=7!4BKC9 z#Cw3_p%{9to-Z$M@n(#hjOulTbSxGHO_Dd#iTzeRbEAL}@9v2Y_Us^qHrex5`(5G| zmijrC2fWIq$_wJ%B$|-0|FPi-grP51T>A@dkXskh-X5pjbnaeTews396LDVqcS?el z_TKSx@C_ir_52wk#L9DsZ6o?0{-ym)YX$^s+m*Yj)?9dsfeIg?T@*Rb*{INlyGv&wxt>KyGPX z9tNOS566Q>B{nr;3O0hT@3S>zHA)A=j1`ppqVq2VgN_{dNX|#6mW2udUgkjn5C-=T zm*l^d^dIoYN2mUw!=DuTBOmBFa05u=%a0QhToAE=tYF)VYcECy?V9CB11QTy3qVNg zoA&C)iGK(A=)Wb9;E#%Y1ne|&YYrv?07}lq4t?|)hnTG>iyoa7?C;;!#>TgdG86Y; zpL}o#(tUtV#*Y^o>ft_c9iRsUv?;H)o;UFpu>l}N#{Lnv2XNy5H`KEqpc)9UEr?)Y z9a^rKXBw#A78bqS;t!`S{V`tsDINgb{i`(qIN$N!$&cwTC9v3!Z0P1jf%ZmA5Y#^~)aNe`j2SW$<|%LhUQUC0-{nM}Pgn=W-vIQ317~vv=r)x9 zzFco@V760lD0me4Fy|D!M zlx6uNAl}|WC@FnF4RnV89ytXY03g(_>ku#y0Gz`1dtYY*`=+oxxdeT~3i@_5AOU}L z6>I~5UBlP&|Kod~V%Kq@o&x~U{|qGazkXmp76?N4{yf{TKZ6Qzrw+#5=f9-02W#9W0zSL5F(WZX82vFpJ58cuq-M)Uog>(+U_xb>+t#}yJ zLCg#4Ir)FsmVsZyS~Tgs+RLu|#8&9#s}YYAV%1q61%lrP2K~P5n<2NsOzWV=);Ycp zrt$g~=xPY|#nWjaVSb<6_5T@9ey)GaDiCw$G|{=;rlY*PTt0BU2}19*Ij*+fVU?5uJHT2Qv*oOtDK-|1Gi zE1pq!kGqN*FWtvjEe;>np>@|$@LW$fKSQx&nx=(_fZ=_LS zDoT+K#dcGSA9Z?mn*J$=H4X)rx&~8Q)e7j2CKI-xBnE+!M;n1zXB{QFSQ*Gat(D1< z%AlI>(;v*kJCPt1c5UX=a{|Dnvm0>PxJY*M@x658U#i!^kP>_dh!#+2Qgb*)5w6kC zZE2ZG3vd>mTo^lCf=_T9!$x*QpG35?kY|j1!?b6 zwleoK^x^yH0pcdnR%ndynO!4|+P_&m`?3Qs28Pu%AzV)+Vj(NXKQnleZX5YPsg;K!r zG7^^yi+V9WTwDS>*x;BtlXwv-H~`X4F&q`6)V)B)Hv2}_so zx~1}oaf6y!E{2IUBR%6J_I-9gpRW@3B0nu`G3i89Z!&3hU~8+v!;UdLuk~nz4Q#ff zQP-CMA(+(L> zs`$FKxz>SE^?P`%ASsxUPH{Z?`8P(O%RGf(3Gt@Iy#6!qZ=Q9m-ECIP*OEIdA4;CW_)_n?nWAkTcXrYf?%kkUre8`% znCw7PFLGy#q={#K4h3%-+}anzWmFlRfSTnEDlx;f1z82c?n;7yB#1A{76az2;XdU2 zLOux=;g4VBS7lpvJzPB{aVIip#RxO!O2oRIv1Kvcrh ztz&m;uL4y_iC>fX1ScG=soZa6Mufn4rTMYURx6zdE6{$u;}o0Ut(aus_OzrZwuvk` z6If>RP_^`MxfhEgL<|+3_nf}Xd(z72L+T|;=p{TJSY+@+O3Dp6rXedAO@#f@0oY`| zdC%$m9J5TlGEVjh+jEeROj=rTjxl%xuBMl^<2mY||h67WjZHq>jX#?hc?R$FgMin)8WU$h_p zv2R{vcu989>AdXcyb3MZ>@G>AfG13CqfzSJ?o6*~uqEOzCt1&+)4MOjrS>`RM)wTSEy_<-F`|OnG1!rTv z4s3iy#yh+bp?&jrLxpby3s)YCu{$1GGQpUvja%lFc(L=8?aHtp!|CK$rrPs>et2`- zW5N{$m6j5HbX%Hfq)?egEq(IFoRj(&|R92}Q$h_x(FkRm- z6|5$acmofdc4>a9rn%T6mxi8fs?_XO4O$b$lne6x=_E1QKsV(2LHc=wKI5fhpEF0n z`kd%5eM>Pzh#f&RVPRK(o!J~;&@^9EeUrT~&a5(MqF5^@Z`<1o&AI8hpv=%A4|i?9 zOwhu8#LNtXr`~O#tPFqUO1@cn7J>hjuQ-^X%YgG`v0253eH&{UU%g6y-fShg#UFvk z#@KMr_T=o4NR>G$598%Go+0ltjauzJQ>@!Ieo$Q2zex*FM2`2gHfL#bX_~IWc&J-g zgu6o3bd+||iE$fh^yv%0_Q8C-5OwjKdu&8=C5og=6p4vvMm?H2!wXDkdy=I_5-P5X z#rdV~E)>-5l>J<~)&-;FR?Q@Kb>e!rDcF62w)z_@hwcl3_w)1vyMjaDIgPP-PX^7; zT*RtWanUVZ$7$;;qaPs81YTxJYe=T2$CH}iAIOdt8l-(xyp0f3rLNOikIK+@j2_09 z&UHjD9i+dfgjoeSV(>tnTY?NqGJScaysfQiMuX0iKSk$KvCLOG8SLA~L&o3lsB%XV zc=NWc(REhaT@lnT?^a;EceN+BBPIJ}CQLU-AEzQ6*~=_Cu^n&QSRGWxNNo(y`d=+9 z?0ekQ6Z-Ksv^J%JoICHCap4sa8H%n0lz>jt16UNZ^GNH#OJEDZU?FummyegED3`Ox z;I>PmXEorL)vxD!r^dQP3+*F1ELsy!_k>3>kf%a*&uoDeSzKAviPQSFAG(KD?C2|* zOoydXmck|JofsC1{Y4pE!*`Uz%)>{7h!}076sB&jI!zGMqIoXQM0S9bJ7SF9joL2M zJ0)wEBQZ*ywG7dYX~gbaNzn=~9JsGD#fzmQMU5hriHF&n#cbbf zn4Enr`v3_+TVi*QM|LOGtc+KTY%qj~`1*b+s?(fd7oG~TjzerP+pZ=w-4YE6AtuuU z!g|nW9I~~!^EhaajaR}L40%nfk0Dh~Vf(Cy%0bfCy&(+ey1`%ScAfBU(}cCzaZq*G zw*GQci`D$P!%z3-cALa$v%$&U##l5R7rlSm9llf|#>saq%xQ{NC4gxIuVhFR5j+xTz{9Ye5zh13SnWb^bR9-d(%caFH*H?%+`2p{)8JB7g? z+bqb z`GE|uy8SnEShIeP^NdruXVHI@t|5ON9BVsa*E`b%yFb)Ox ziY~ef*p5Y8yl={$6})&JicDdcWF2~WWUBCjlq2VJTEmoF-GzQ-{ zid8o8H)FVvy17PZ-?B&MX@(YORXd6E*P-O^SFhO?U0S#} zBK#Z3jPmrHY3dBLC2e8+ru&GL!C$H<3;b|4sy_3YOgU5z-M*Wgc;5)#lH7`eaI?jj zE9^8+<*dD;YjCo57#rrNNH^n308hQ_E@J-O-komC-2gnb;?{nj08cN& zX3S}~O{?>3rDIWc1qHelHZvt_p zp!jH`mdma(&o!Kn+Oep*QwoEVF@;$r%a0{sx!8BSovC>`8m_}ERVMp-kJl8-g^z~J zadhvx*Yk6=KCD|<1)5IRQ9)E~tW;Ibtwz|&Z^@}JDi^v>L^A1^JD=|p<+_^}5AoS* zN^00uSdZ&amO=Ck%NOF5S~dC9Pf?HLd&7Thqr+&W_2Us~!Szs#`3lM3xSb&N2i zE}7_&gN5>h5SOr}K8fZh&$y?h_6l;Ll*CoTSHIddomtDmeKYlq2+^P|^?Y*t&}x%b zm$$7nIeGE|4PME>8$#lcnVHiGVzhSZdLgdnvdmav%4C}PZD6%&o_O2d0qd2=XXs#* zG+~lXE1=Fq>f+qd$@?(d2ZA0GUs*udZTP=DBr+2xwp z~R>^EKt`2l<#f3Ew3?&c!A@Q`QMK-HJM5jpnu^ zrFY9p*S5S3cQSOJU1DQ3&6ao85qEtPOqM4Pn&@WgHj72Ik0saVEmL3brm8@YdKC|( zdfEa$QxXSWejY<$jK}XQ(9;Vm+{12?cDI17+NuX;UFYbVRU~5q>{Iz+c%GdL&6)@Y zG-q<@<+fYiv_MY@Zntb-!}JzWZNo+hlXYjyqPYQ~9xuG+8UvL`Xvs@gw`}9SfMGst z+D0E1%PnEe5fMF+vg3};EY;=A;dr{K+jb;QGVNrwSEl$&ULuw6{8%7;J=v^Ju1GZW zpkMR5Ei>$~hKVMg4>n0APWfA(z6<0IEETx(DImwLmX}CzK{o+PF-(jd)pigk)i%=&tY@{H;z~FI9lCiE1&W_R;Lw%^O+66 zHE2IuITtGKekgDl&7^wH(OO?g7+&bPzG0+YU3$ud6}@C}s`Ew(am!>=SsLjErpgqM zM^HMn3(^^6Lg4s39DCX1aTL@@JtR%f9-f|r5Sk%+*tcPgm?5c5pw6rqEMQRL{tM*D zTP5u0nw5kCo^!Lq&-YRe8DF0Qv{Qr2i7-nUyxfGf1{$uFy#8KIUR8S>BiSptdNDqa zwqxVT-JaK5>mQj&?VSu5T*hNuv>&F6fNE}j(saM&($pYVr@?%#iKzW^_{XR26Mp0b z3?@1eBKI9N;h?aS1*JHdV6mHsF*I=?r72O(%CQBb!s{#Byy_cF$V8#TQ$Yp&(yRJ; zC0DHWIY>deyuFm2qKzg{-UX?njqcN7opbT*)KS}BzKt8EDAiO9N$~tH9N~Tw8)Y&` zr%w_LRTygiFkEU46Q2omtNXUsMK)d_Awl$*@$kTuN7j zF~~@4yrSKX)i-yWX7V4>FU_s}dCr3Yt_I_{q2~DdExxG-N<*Wm?{5Y<&=2hw&c^cS zLmzqX*N8=;2k4o%NgcvIvB;(VsO$Eo5iz(UpDE;&Pv6^eKZB4r_m%vGMv5y(;!Xzn|N$r!53bxFQC6PK;_qCg2G1}Yhf;mhiNg}_w0fNcETMI`WC^O|Q zI+#`?C+r6f7`OFOS=3|aVC%&1VZ8;TvR)X%-;4{?A|$=Gurm|VG`F}H$7xoMH*0Ru zl|%C=7xpDZrQ$aHo7J(Uj3$R{bi*)1?EqFq1;?Brp}pke1F(Zoz0VP*KZvu{&ZPHU zw`J^o>RGh`@qdSf%`&%P&+6$GX1_SU1DJY||CRtL{wNlhiAIcWS{BqV#M!5nsVKEW zCgQ5_7rYLK59YAvR($QJTAmt#V3v+bC2ow3K48D|LBmSU?TAe%*|B@k;I)N1@f24U z!2c+;I5|C?%4-wdxTyED19cZ=;5zIjackq-l7Qf?>{A#qsTlpMn6mNbn;t`sc!KTT z@4+>y{T6+Hi9byFo-DdDT|;{MYf$&SISShrf*H5q5^YN$REAT{=Bo`Z3VXhnRB{UT zutO;2C{V+_X>7B6QRYOCv9luxmnr9ExnteSj78?C=8#M9PFWeL*Gh*8-j`|nZ-mtS zvM0z}x7r8@eG8n0DG4_`G|}C^ZL>%@YT81AXy&wX$NiSjSz)HnxC5QD|> zIcI97y2`!HUinlbX?*J1IvtGG(k;I9^ZN{9j(@c?tKK!_S#EY8a!6ol-QP1wycE^R zLA5)Qb1LD_d7wz%{ot#_xR)^1E{jw`Q~Nnve5{*kEY%@x=yY0%V$r!>2TzNq?C(_lxZIW8`FWpf=Cv84Y9 zPgqS_()1G8J={N?h)awFdUCvK4UPPnr=HpkUn2V$pTKF4hygdbOH$^SM@`}u&wZ)WoO?8LxD-h0*>2ea5N76{Wx5|QUZF*(F6UCP*jL#SZ2qZEsp zfV_EoFzux!NvCa&{B*t=^U{XR_{6pOQz{*uVO$r(!S;8)+_77HC7ku!Fnc@)bZ#Fxg!Dl6Pl$YKqUoX*@1*V$IRVy-k(K@B8ETk^-v5mQLg zcQ;jQ=f5?}LgpS~9}F9!Z?khD!3$X_2x|n71o3jRwVrgQv2MXxT$6?{n?B5WtC-CGFQ zI88uzo6~Gvppu=>0ky&l0ZLUZ2g% zUs5y|@q(|6D}~e^m0LLkqa|LNuAm`;`$~qijiw{ap31KWu6!}NDxf3=6M$34liiO> z{GA#J7c@gsqr+kzvxV(d0s}LNO01C}HPEtbXNo~AqU^YTY$T>((LysB=Mt@%&reEP z>3kQR4^mXsw>`HY)pk-x)pIpU828fgdC55I?Ng~fIzKf|ogMNSdpJ)OWOP}E7}SP; z0T8S+>;Fs0_n(uO4ET&J|1rqNz{Je*|5~;GW0H@7nVp0E|HKym`#@>TD~LR{`VuH4 zQXo?He!u|9_&)4Fkd=KHAgEi~zU{ycjd@@fXd1u0o7?O5#BFcZ_3N+7E2;{;+}6@g z*=Ke@qOw4S!1($oJh83O&3OMb_%UGkI3*Pm5FkH36%qV+ps+;6AJ=B!Z@F0E3dlw` zfGzdMF9QNYI7a*6abXy2g3w0RRR9VyDF7xa|BRrpj3h8{;Cg_7?O&$mhBLr$O!lA{ zz{Y3*3M{L5AjFdJn3^n}_2p@V!N zdQ1%UKgl-H{rF;SzrpzjOis?tCkBR&4h{y)^^W?@4Qwd+C1CCTI5Pl}_+arpOylVH zRmT3=0VwBri|7gDfRv{CVSOl*tfaBDpfC6U!uk-be>AxGwX>^Z1YQ8Zx%f2{LGkUN z8h^IbPwjv_`}t-7>6sXRv2OA1^aA=<{W!4DF*ejUFx9&PYGeRO^`+qXb+tnm7FH5) z_4RGOrsn$>2S5+)_N@V0ndyVkzfw8@`L)Fn^Z_dF^FFYnuLoLVVWVO7r}S7DzafDv zn$lYu!edfU#y1xLFVuVs^}XT|itlWtf3a&rT4JJF#(v`=);HIW)i6e7Tcz=;2V7R8yj`8`$#KR*Fts+cI)B>ytRXN#NRf|sr+IzKP5e@ZgxF{U;zDCj1AwBs;`?W1 zVf9bU!rXt@p@RV3^I3cyP+Hg+0`32BX^Ch3q%}P95%E9H`Og3O!IGKn7QLv z18oF~!S74|<&*o=qy7C2{ZdQ*UE}!e!-(M0(EKSWd*9ms6|>U^`FDY_KaB0NvGFAF zEdkYm&%Z1xK;Jzbjrd0ONh`lAlAM_QsRHAh%MW{^fjGkhwfIIL^+gFAdyfxoUqf{= zO~6_~$ky2XeYdCpKuqv&e$MgFjE(-=c(CyWUs51})^mOoBh@k1(S9`;P+VaB{kyyU zFc9DwB&e>g{$NbTcrgOCelZOG5eu862#0_Clg~it8ydtuTuQO80Z0q<3i}YijAMO? zWC4=K?S?`05x-;F0i_Lp31#v9CBE1U0qJ{wW7Gkq6Z;T?{_Ze?_$6c|-mk%bxxnll_QT0g@)|fDL}{u>{st{D{E2Hv7V{0-=40#A!qO5SV~B zu+TO9@$W(-j_f$D`X2hue)K?yJ&ODgxQNpeVn~jMf5{AtK1muHKV;slkkg}o{oy6& z@4(}S1^#8KL*#{IHx~OZ;qb(@qksdzUiE>$UgZB zg`lN>{o@g*ebIm~nliF#FvdUNpu(ZQz=D_cf53vDwhrOIFA`4h;1~P(D1)}`r2B}P zgtTi2rXIR5;7P5>sD|`jlP~ZvzAOV~?yw0MY<}(ye^wB;_AJ4}XpTLaf94RH7=DSq z?*N+w73)DZgmMS?q&a>P18jcSNA+}CK5sxK`e!FV9XGzn(3zNu)BKz>F%)Bm?kovp zVezT%{m8<<(_qHm<9wTh0@?X-6a1C}iqG{e_Vr)H^uTRtEsN?1* z?Dqo^@J~lzbo^c)7E^XB!;%;rQF?j>ab@n)sD`D0&Z|f+zqWr zCdX3++^>sur*aPvati%ti?{^#)r2vd^2Ih!aII}Q5y#3$x@TJasEJofUK&~uD{MB z>Y+$0!83zDGN^8bLHg&d>l2jn4!HB&zWoGn;X9+Xr_^K~wJ=H@MPBxqMmDW$Ft#`N z@cj|TWRcP8F2@K;$e?c|Ix25-&jnHG8^ zL3PVA=_q=7?MS`g$o400Ny7dx|CV4K1Qk^c|7LNcXCXjYh z&tROE8WnbGywE>U1hQ>EzCQ!v5U2}6YuQy=fWSQNo>+HDx`;AC52-(AE~xeT|5Tjo z#bEWSTPswm6H9?qw_-NGd3SZJ5qfRy3UsMyKc_r+!tkREu0)?ipm+C^%JC$=c7VIE zX6Qpyx^lNSroN=#XJi@j*ep5oku~qKts#47nAjYAT}V%a7mO@pR}i|5v?R@dJIOsC z8G~1+-89H^)0F&Z?fJsfH9=)^3J%4d1W0&WH7yiEUjVdCCva0vSN7o=Fa$0jl+UbE zUp&RMhD+=9b$o5l;cng_FtNFN^|fKpxN=BA#~A7_-%$3B(n$z;Eu9)21_(~r-C2jJ zm|e(Lay@IM0D*9e#K5xHzrbZHh~^KmqW{xZtLJ9!I92+7OshpMTP~~2X}ny~(A?0E zhIa;`RMeqXu75jthqWu)P1g?3|LM04bZ}XXAtp6L!lh|&ScV2;JcI=;dm_hje1c~K zAP$v0Dzj>8NS#=Tk+5qmoSFRF6s#k}tF`6BfOP8qw(@=JMt2uZCoO{uSG-|j z%mr6-e0Jjs`Qq(fOtzuFQ57y1ImG z{s%rVvrzL6YxWqM`xrDjL67;yCX!7~_%Moz_G`Fj%c_oCH5zDHU5tPRF?|mSQOT2f zM>y!Fi3C!cRwtk_9&?>-P$ci3S3=&mCn3w9i8J!CLz7&$4xB3{VVU-)2?Q=`kjOC1 zVqo3}i-0AOx4goUaOq^caNc%QTUdx*v&|JtdLF5i7FiCg>o{H_%FbX|23d>w4l8dY zi^fI_JI#B-#`7zw=Z^q?{h3(dUU^aN#R{4%>Kd{a@&Jq#Dz9ti2Tu>TFb<5x*Q04(Sj4ve z1NE`KS7y{lV4aH;0Ny&jEhUcUvx_?9S`rA^I-=(u+{-UiU$eeZmTQ8s}{LeMykk7%B_3w=KpG$w>wF<8Pj-U13HJ7-#uP46#f& z+4x(+qj!4;?ePo_v#6{S>stt`hep!D zIgWYY%p>e(4!e3!UAf56#}ua7y&FSL9?F8xDIV$G77BOhWVy(Zc&93CZZoMNrKQ7j zNYc?ju(ToU+*>g&@ooL@Xt*zAt@}-1d`Wc|U}V!0J34v$5s~sr?ytXrQ$b1P&dXON zmjpxhtcABTHBEN0-|JcFL)ehDU_HDYiJGd;l4Dg}KNM7>o5OUg zah<>`LNq|^uO+`-k2pu9l22ba%(*fQ}D`?SY>2w zTWfukayGQ6OSXZeX}xf1isd<7xMw4r+6wc08p}0{7+MF1d}Vgs?jd(iD?pXgy^1s! zVYH801e}?7=hDqpmgB2?%VRKRCcw0<$UC0%ce|>W;ueu8Zg5U96|EcQ*dPebVhln9 z8qSqzUPO31N>R#VDNfp*U8;H@+WMQFF;R3Fd`_kyqM5MiFdak+G(YR96g+cK_}5lKCGSe<{DpMh$&jzElHlxUQK}r&sN<%f0(c47fwv$ z9CfCMmpqlzUuVUQVFE5wN!hhh1fAN846pZxq5^onR_SKK#63G!>tlw>EEHD4^eCjt z3ix#!fw1j-hnp;k)j0bgj(pB7B)bUihGSwCtrY5Dc>V6w5=q{Jc+E8ZPv`GLLDDcg z$x1})tjDgx^HbB5B(W*d*!C|+1AKY`UM&{pH)g}FT%*{9WE=KdL;N)44_~i`GbQd@r=QKQjk6S|*$Lq~`vu0T4oR2~|FVEI^V@L-u zy%w}vb=6X)Vn!UYPdqi! zKlz55WoVh}4mo_(f!++%fVKN7oT!Cs3+%4&236$VYSZJXIPwbeY<0t;lIr4BZekr2 z4x5xgVs_%`8ofUMI=rd_c00;6@;9W9lzp)}AT`^8RjV8Tk^pV&KN@G0S4}qGarPCZ zbGOy8bNFiK*Lfi`jL($6L~uBrKTBev3GrQ6(lR{6|7N>B{_90Yk#@C8on*>kSg80+ zRk~etu!uQVX}`meb^RpcEhZy|U#C9I*Vw^E@^z!72kQUT689TtCn zcb?8v-RErGH?T}rTzJ?ajnf5gAJm0O5NmnLFvhj0{^(np@?wwm0r?6lbg_!@I`tr&`k00H zO!(IX$!?vC_I-eSET?R8r9gT1S1o3|KL?j#>qWDHoO-Y4lcDWihGLf_Ode{ zcH5KMlH#>(hzYPXZ6`tg1#O;C`f%b*D_%9}`$Box0%h@$*>ViE-aoL9<~7AejEgtS z00<7>k((9O@#kto&wU9b#5Los!w{Kul)EU{?!cZ4PEqD|=Q&Say!oAbdA24BPuUEb zn8FH1WD+3wwI;KWy6K+qbxqimGLynpU!lxyEMt}F*=3?$*8@xvU2rQI*fOjSBVkAv(b^RXPK_8hptIAVy4fgESr#VV zAx7q_qmuT+Mu!QD7HF~b3+N}##)VZj45_t%KvT+U=jM; z#U!VWuoA-O@3-L=0{BmLrM^)0T|GVpJT@dBro>yn5h2$EMpTC%UvvyTAPQ^E7;P)# z^uYNPfa$y`tFz+V0>>Lq+5l|_IzG!t^`L(W*91PMW_=Mo)_Z&2Q^?}tu5TfmZ=s)c zYe9g?r@@lcq5=hNRH5L+9rDL_G<~}ZSuc_?;t)a;Z-HjHQ*`m4hBLxcjKzq-O`7X& zpTW4xD!Nzc8>Hn-fP#ITX77Jm+CkyIGypNS5t#%sR6}!K`#RJqf!gdpL}4<+-h= zG|^JCi(`OL^r11f7%)(GOgnMf)(qd71~4ypF9~S{vm&zBa_@*Ph8=BsIh5`*(zL|h;72ZiLqZ4vk;?#SD~a#(z+q%4a0c%QMc6I?YK#32xdj(!NEQ}DQhr4nE z^q0nd{lxehQ+DU6)~=GtFW-Y*(9C`6sOCr3KlD|LvK9&SN>^uU;XV}>6=woLWvVWx zaI*?nz9j9d{KXXwDcty^_|%*wMC|tcIj3Wd)JB>)#b_ZBA&sUO!c6@kb(kK+{D`zk zNERgS)qwDFv?|`-i0I)klCNCJUPE-33pP4aRDpoRad|kZNaYa-mE?w&kqb^toiG^J z1fF(}t`W66F?cTxE$krG>7$XaF^+GUu_<6RNcyIInMbJi2N2|JY(TmmdDkQGD4#5Q z@7rU9vt8$s7aTQYQzLvLzbK|Y!e2*#c(c{-+X=Gb5rZS!G9*h-n3~=fK{v_1S`W0> zFHm4t^Gs+GRMMbY=a^tGy1apf><{6tOrQFeBPxGZBrX1_JR3T`BCd#fM!=zy4rpht zi(CUU{c6|1Rd~zN9&(#QqqBJDXw9h@U8R{Iu!)n4GEBr5NQA>z8RyDA8m9bn#NDTv z@>EJ%gjvb8-fM~6P3yCB;EfS~TM+zX?NCqdI+JZ>cmo-WvyZo;6<}FBVQ2MM=Vqv9 zX{LtrFDTFZzNWjbAqD&aDMN`KoV?6hRJ0j#Pq?L=NAE@pVRf1m1d))|=V3TfZMxvE zSlAAziY;w_g3jyP%YzEEk=2W)OLr&w+a$ZV28QycpJhy6%LL8EHlEA5Vw~^BAJ*iUUFFJv1 zro(Ed*}xh<4nd=6Qkv}D4Y~AAPr%7z#&*0KWm49IF${Kj^?}>BJ@0zj#8M~0UxGUB zG<<0IhK3pwDpG9kZbmMd49FS+mOh8#{o^sUhP7pR zkS+yJyfG@u*%!h79=%oXWMz-t+-!ukk&||w{J5qNOM_V?ME}#97lK)_U**f_y=;Lr zX^}o@mC-c&}RveQ@ zI%bSpPO=Z^%IV^zNhw(7uRsJ>_VKMyO(n1Ck~a1z3jy7*s6uxi@LKgDZR9eIA3J zZ8)&kxLdY9KjJ;(U=)@v)mX+b_k|#>gAENlMbjVrqd`0S(d%_Jt_9)0d{=o@m_D;^uLlMffCw zHL9@hLl=hg?G`(W>hu~pSo}we7f8~IBGVZ0Oq4I?wlix@k$amI&j)xpmU19yTy?U& zYrTO`Lb#YD41KTXWq9X>HF85gNI3zgESA$6b1$I>%*Ay+2rM(#Euf4b3(T71p-#A4 zFCQ(`E##}SZGTDSqY?Q`bgY$Qo-e7=>!Qnad(p|&s5ss&PXwZ*)z>8x?-~!3kxXlv zPJN3zuY%fNuT^jj?2^MnB%FC$aCxZvLs>vQS?1&hq(A^SRlyK4oP}Xzogr#5XU?k( z%^4a8TIO#N;`zOshvDsu+MjBZh z6_+EMQT$bY65J344Nn>0tvj^rUc{_}%21^}aL-(endVvAL;K5Vj9=Gk%o>AD8#>jj zUz2$xa9r3~M%Xzs^=(f)8dNX_$sl#0tR8f{KTG1bW{(V6g36v?_=jVMneDi4UA)#LrQ~x!Tc^YhNMnG zZyZu{j2d_8>45G!y?9~NZHwT_e2e@nrg`XKLM`yla|2Ss83vBcw#|AD;C=W3=H3x><&-<(j8 zGalW(6iX}P##7HTrg*=#4M_^Z*j!`tyh{)ZWCr3?c5a5b5oxtuTOHNWpnwCet*ORC zw-4bxMEHg#^1e)Kqz-T;pM69#vrR^l2Hkg+>hc^UOt*bJN~eSa^EQxLkn$ZnM#?z~ zuqn+^-8{)@x?oJvGID*yDcY_Y>auFTKFGpd7_ex1Xp$u%OE5hGdM~F4*=50r2jt?6qz-BKHzC_ZL4RQy3zpltjrS%QQ`CiH&p8A#nd1o zBs1wQKGii0--ho%se_td7?2`G8I1ZiyDsKc@12^<7 z4r^irQ0tm;y0f)L zu3h0v7fu@ze=c3t{W1F@6lR^dA=E4T!Rp?4^xUal;HDzM}L$pjWo zNTPl(*j;YViEpC|apMvmT16w%n@W<_mR@^Q+eZwwD6VDAiT(>=tuc&RdaPL~us8)u zXhH=(lG2sB`!I!+j(x@A^^ zuNTe|KEP*Q`z7;wbg{zec;_*79u?@!)_jKLCDXO(Snv*!)6V8=6#YmC9onmG=FOHX z)MWVH&wx4Kse?U5ayY&63Gsat_6>;tMNsXzP|wSUv_mE6Vc=)eJyvC1nCSJ;0Gu{1 zZ;8gS%s_ULCt2;ww3sdV6F4+JJN2PEpYD)^El!J&Wwwl-fPup^042>`#wSW27?kr2 z*`#W+=X=2+mh2`(;Rq+QQkA2x!jfJvF4H(MV@HNQjuKM*D*$ZyXtQ31AlVgAE2%y zscZvcA9as4`OcYy{97x34ohG@wyH`*BIqk&>hlfYJ`Ig@|w}OyCe1xRWT*eoFpwl0&b- z*G^J2zT9yXv-J3y^~Q7gfz{3Th}F>DE}5Ih5R2-~!LwyHcUJQ8&$+ekJ)=(;87giA zN~0e_ZAwH#YP(x``0eoR4qEFQ!H>*HI-sP&>O7%Cb1Ej;Q93Q1L!+6uJbz3%Cs!t0 z>A_;xc>U}eB#hNq5_8Xjw+EVHD{S=gbWV$2NS^RMbQ4hwkkCNa$^#F zPO#O{*qbVb;bN%4HnqLHQckizZIz9y8e?2-G`Y*b$=XON1JTMjcJyA*i@F$f3(#sk z>ukR+fpYo#XjE{g7{QQ&jS}aUonZpAVG2*8ZXX*(qcvxNF}sV3ANUG`*NR&Ds73W| zI4z-G^StW3BqY7psBXCGp1fzXCqYkzzX9NlfB>Eek;vBTLTLpHpn|&n($vMmN(Jm| zbZhYwoOC1drVwO-Baj+sWEO{1?opQJc97ZS?G_HZzG}qoZgo0|e=ILOsF{UwU zFGPm)tP8MuGLQLX*Xx0c{{y;RzEiv zq|)74XaH{$cy;zp>uKUS=0Dihb-AkVKkV-eT&B^q6~xwBFp-a-`AIrP30G#33X{N_ zgSv!zX8#Nfw_px4+daz@HY&jZJx_i;HY?`+MJO{p(!M^5JifU0DQF41+GF!7mtt6k0Mv|8`+5I74evp_CUQUIjlaVJYN^cz+x8hVa zd5;oCWVm9C0sH!2jGaT6W>J)7!?tbPR)%fcwrynCw(ZEU?Z~ig{$ZoCyT0nKK@Dnn zrtiChckW$#ZP+oeLE^~>-i@gYLsD$_5~7&GksEf=!hRS|%UA8E3M8@No?L6LGN-=Z1uGo<`~APq032{ zSPQ%!ZF>~o)_EGN-}IluT^%8o7X72t~g0p=MVCJqvThL>*oA zQU)5x&yJ_)7t1S93=8tX&nf*{^<|cPnrTk&3n4(P5&X zKJ?>HJl)S)OJK{R9g*jPeUKC{Jm>)ftE^>23TrnGM;OVTLIN23w?MxqS52wie%H2Z z|JxL$Zln9eZKh_ZY{Z9|t1jb#l_8Ef0Sx+?+hVT4ln|r%GMxnprwu|wVq_hy$J2Zj zJE!h)`fL&LE7kbZbL9#TmgiOskV{dY0^rTUwnvv@kP$9Ye|e!{vH1d($U=0qheoP|@2|G_mqo>K^AH z^#-)U*t-&Dfu6T=^O>}$p*n95(il6Rnkuj^>T^T9)7c7X8oHZYgd&$@JblV4T)sOI ztcU(&Gk$VC?t0baq2aMSEn1kxXcNGZeJ)M$oClrDR|rR}KfE&k7PeCDYgn;n{XI%p zq2SK|`alxH(XZ+=O+^{)djc*sW5xvBYrD#AHQGTWKCs^jKSD_aDbAS+$-X1*G>kC785)65g53rJ?w8JI`!B6*Bv@^E!||u`wGM}og;ARqWuN0A)ljhB zFFI#!k(}=9m3x<_Iv!lJzH&i=hfq?<=AGk010T>2665l!;|qdH0Z-QE&h8E##(xE+ zPylk?@oa09MGxWz{2z0<#Ss;WYh=$eKgJ$^=Yt=l7VSqyyrv>|bM3eMu5qc?46t5fhDN`Pkd(RqnAT`?XVGah{C>Y{W} zs&nKu)V61S#mF@M(^+k3$r&+HNJYMhHc&*<7h7d`v)|fws49QVJx`lxRp25*iR0UG zl5*L1h4>}6AeB+9mGFwqpgd+c%i;dC?DmkTcCVUh{rs#GfxRe}FncnA$^X-7A0uRk zWRz7`G~4hvu}rnAKm}!65w8~xh_Twm*V+8-R_-cUdJtQ{3txb9Hx(`hR_eq@i;0J@ z{&2r^vfOhamLWp(UuYoGzA-JQ8qvpI?Xa_zSmm`-28*gOPms9o=-ie# z#n&t})>G!=;?J;qX@y^Au;)Q|PAHNxWmS7J4dWM)Cz%N+q9n~wN$o>enI9Ml5A*+) z@!+>XmRfeZ`cs*qGG>!OqM1t)&nxr3;aa86>8zw>*2-keZZ8OU0{+9)o!H9t`Ov)b zC4`2?lSGZN=zPg#XDxg9;8yl4SzP1uLliZ76 zM;bbu1e*u~sVoLXYkbGjn*4D`Tx@oKL*=DK6x5)1KtA#(UUY4+9_t^7@YQc)p_5@f zPe>^Er%G@~j$|~hMZ-+j+d_i8O-Ea~jL7Pi8-clX43;vWyLmZMuCifCc2&Kk(c4!f zh#J?BEaa()Gtw+(h|K%wxIC%f{9N2Gx+k+8J!F%w0)xAlYQGJo!KB{bnFhO5n zeZ-aAMr=S6Scdw!aDsFgz2D5amcE_cE`VA`6y<*t&aDb*YZof~X>1EtU$P+f=+jDq})7 z^;NgERq+u?7xH0>TH$v-XT}GOIV!<*r!%P(ZX2m0+M(~4o%@IQ+yh-O5p+xMFdXLh zyZSPK?axT>K!%cK#tF1$=&uMsJkA8vuK%PJ8ZtOe24cr7R3VVf-$u7>QxCLt2VG#f zi8@7lR$XbSZcP2!ZG0*)Pe!(slH2j-?#f z?WW{leVwF!gHpiPcu>&bYwk-)>kN&Qp#kOMnub#m>T`r+$n$ynDAg6?Q1&N|K`Wvw zrvcqutynwkAug<^YkZ;K?h(Q?JftJU6@T%^86rCsctYGG>Cvn1Hpe?2>t5e<4|paQ zjXhVHlL#-D=u)(^zg ztA;s(mEbQTlvxA-$rlOmY^7mxNgJ=K31W|fhR0CKAG$(;hq!i026!A16$1D8cV3TE zs0<)Alg?WV!5Imw^n)nu`N_DpYHqciCV<@JB5#ap8r*?{O?Pg^lt=uQ@yiB_J36t5 z;J=fIW1Y-jd<>)+_I$=OYs@AiaRM_C4xvdm4NXZ;*zmbYmrXfR!$70_?aB z`>`JX`r*U|+L(!i7H4D*pc~8~?W#%T$QBL*_;!nHoky7c3GvS_PImRh!wM%!m8)^! zvDTFLZ{LOs@^mr^r8+hlNl$5V@Y7%(Tb(ul(;CXC8qexc@Ftd(7Q=I^$5EvT$<@$L zqNL*JgpK&H<1K0lwr0k~G%2>iq*K9ni{LCuxLxLO0gp9sb^dI)K;9=k7%#kwXMes~ z-icq6;5>8%D#6S9==7(!-_raCG4ZO0QxiT03$wBwL~!Z0^4#WJN^EMrw|>FMc)K#aj}M+6F?cJ5Sc{TRrN6K7P6AUMM% zkyG7oEbIfOosrw}pDK2#opOfTY~`*<_jT5y>x3Q!4a1M=uO;b&H4IE*vMilIUq~dt z7iYz&jQI$-sSpF*j&Qsg_=2amhS#c#spLMri{I8YmaxJK%&@qo&LY^+|AH9y8BR>Z z`P}BjUY_+3@lnsV4aDkt_R%LRUcIU@l(3;?w)yx6eLW0nF_3*CM8Frb=#1 z0XpeAt|6ubPtBhLjjDoEL=*eg*tdN_8*ow_vZBbl+1z$qJVR9yC%5hI4Gu9sA5IcL zkT@=^v~S;H7NNGRmM_bBfV8d%*OsCeS4=-PxILFa?|eUAon3U0RXe38pV*3EJT>n7 z$85!xg7#sp!ULE?ttmyZyg3eNrV@YJbz6x~GxQP&8auuXc8SaVo<>+~Jj z8T^IV`5B&hQ`yI3a9=Rj8eV)7kB`$Ly2j4`j(UPu&Z4Y4w_DErhs%>rXfOoXxQgsGCE)`=_UIvzvrAD1i?MyYGJ&gAR6gf*#kFt&x90M0OHafL zznyb%alERrJk*&o2UI9qtqb>a-L|kzwCTRAi&AGFReUjaZ${=@sLT|u$Hj?D#T#aH z!oHr)7TR(j>hqL?3#hNl(6qcz#-88WJQ4&k1k3UKa3Of2J2B`|AKcm*s=dM_^#-n0 zou|!O8Dd#H+2~UISDP==aEC=$qn=E6nEvg&Vh)97Zr_|;a1WWq zc;fl|6yg(ir^>r4pobcqeMBQbSspjcBf`Llmml_Et8BmjWK>z554sbxJ2&Nrha*DE18IrXmx3 zVI>g)<802WgT;B3?QtD|BE0FMDOFd!Po0suH{Rnnm9Lu|KZwVho?Ea>T&T%srbsC?4 z-A2CkDA1tpkz&s+OB|*?xlUtXr$MlmT&a;ty4F}_*+iJ0P zg7CxZ=zKNx^?U8}@UJ=TWR@1y6#iXSXEf17R}jESw$*%P%EF4nk)E;1 zf_n}YY7AMy?ru$jxHV)JTzGnQliY?_y~-~@z8qYYGTndDH%{aLsCg~_y9 zBoy-SLU+lT*E@N_-x(jP>2pk*D*;P{9hH$tKEgn|9@Yyc~-Hey8fQ4eWI~Odg(u&=O|Igv`($MyeIP+#4j|x>g8_`1tQ< zSW$MvOem@H&u!^f+jyiW$Xk+dlcdGEsTV8WAe(wSLy;iw$V*d?dLU+3;Gzt(aWMPY zvsGL8H79wnTwPa;IC1X*#wq8y7{iiKx2yd?h4ygmmWK>hr^~OZK@0^sJ;pe7NzFu5 z`J@!~^ycTtb94c+tY-@ub~3BE86Sipp)c_*is43!+j1`DMn>XIUku&am^my_h2{US z$*~R=RmD;HmE4=VNJ6x1-Exy5y|6mgS;QxT)UW0A-vFJIJq9xK0xc})^mR}MiIaW2 zNA5oEq)92qtSgilv<6GfF1{Mh?=ukx*Ovh?@gUvE1vhph*vO9c2;2Qh|bC_ zoYmg<5%&Hy}gbr58FI)%B^>? zEx%#APq^Y{hPB{w*>ni;9&wt~SUdhTUY1xLn>lME*$Sa6oUaxL*v{=$0J&B~t{E03 z+sbkG%}zFIGMdvoVOo_pje-48T23(_Csn%Ur7di|!9Tg}It6 z#nOf+f{Q|nJw?z#c22RnJBjYGCzbdOnpgPfYJr1WY$ldhNvG`M>cF$ulMm~qs?6yK z*a>>kcrj-))duW&Tfuf3rz<_pIwWMc19l|LD2TQnc*K*fDa3eH=jX@n$%_VrXy1-X zn0Gy5HI;VC4o%24KljQ34*+)4QoA2b9U}G4?`B&V!R=-s1g6B^r*B zAFh`-+^HE+36CPg^N<+iu=%?!JTRddo-tY7VH*csY=beqk+#!AsAvOA7LC5CW%Ynf z1@R+ILwz0saNAIkr~aEPGrkPeSkUW?g6{#$#Gfk4OdO4bgJK^&paU8W<(xqNzk7Kf&T05t^ zkRBGuQ@9VU36FK`9K?8KbbH5B810HFYw^|fF2o;9P54goRa#v;1H>q>Nn_^MQE7)3 zmIRum3Tt`roVT|FbyrpOBWFjrIQvX*t=L*#2w!?@?7QHkSWP zsuKM#qN;zuRZ|>LIS>{KT~`<2VWA|YI3=Ul=ou0}mBNbu&^7OiRZV5``lo zA*Lsxh6e)?4HByCi)3nN69PYicLF+t0d6r=WC~7D!9EEJ7Rkv;JahT>2fJN+01+)I zAp`%0f~4vU*+=q0LMwn3<_X!Jr`!nH0upEPfx?P>uSer+nw2bxXlZDOkB>(h$0r60 z;pIO<2YMCycY`d#1OoR0!3*Ty2ImRp4EeL1g+xr*zlI(Bx@ZLEBKjVh2hj*A zf_#R=SOJQKAe4{5w6Fwx<`q~NkmUAF1_ktugCHa-d6e%OAoe2<7W9n_*VGo#;S*Ru z1+@gd2jv6``ncp8n$Rl=3-ZX;ZQ;7$vpv)2osF3%wS}>F! z?;uDNikQg0&j;;07lPkhts;bFdK({3j07rRwHzcUY)==qNa#o>ykB$R2) zJw_^G7$h`wOkhbV0U*gJK_IYC4;(+Fqk5LWpKxnod?TPr!D_Mib3jzjPZH3a!N&mX zD?m5i&~iT*nD6Ie3xx`yMIs>bQ?U9gKH*0&@n`lvVEOGwz2xNh{A$j~{RLM50F)D&gF%Z)`HKLWnzX-ZPPe z=h=XZV}*~y-Ru*Hpx`GXsBu6SI1v>H*mpc)kN$Jr*#~G4#xWrSlef?Jhoo8s|MdP# zR%Db6kdPx6lo*t#jg+b`-X3G{js#=_fRF_O3ig+gq$?EAwmwilG6d!4mpnNEP^g-J z_P3C-rRfV}5(w1hPsq)#1nJ{K(0AkS0&;4&Z^YjxT|b~B5pc` zM>yOJ3mwd*W*MI|C{<(Joqxf?_GE7BRT>LA|KX(}n;fJ*qxx#mY=%hkKC93-we}M> zbfk{Vr^X}~#|X%a8(_!{*TK$u$h^|vYs-M!a@&6%CEdYR{3k|u0z&3DGH2@3P|K^M zH8y9+d(i^oQ)Am7TCG9&-DT(idvhtFn`G@^iOGYikUE^K_zr|vzh<18RN_@N{3UWJ zBvyY#RY`@m&`Z{%ej_gFtEX-(ooy7#9QunRTJd=?b1WxQWW)PSAO+X<3OOuZ(AHR5 zVEZ5u>n~rcvn=-rQ(Mnpq$(y`n>9Mt%9Iah&XOV9n@IkFj(rcv#I5CUM=Te*nTT8* zhq`6>A3aqcpTPQ3d!>r{uB;^!w|6JOOw1cEU)a#Br}Z83srPHO`ovy)h?1q#AyfHA z*5E@G@1zwL=*9{AXaSEby)N0B5wJ}J>CZ&`j(%X`bG1H#Up#jap`Z0(Mn#h^qj+M> z0GT~P$I;3~y(zX+3m$QoU8g#AhF7jL??)B;xu#HhlDeM1OV4-$atQ`_w8BaA3|lDX)-Z_y?^Pl5m@;zuCD%PWaLvN2oTa+P z((7ne;5RKtkLGmcA=<3V6z72AymgKeLn*fTB|xv7oyOvbu@`o(1)fCChM2817(dn< zI?UE-J>F)!5e=qFBn!*Rf_Y2S&sj1@Q~6BVtNW&hN3RP-gb6~q0Kb$K4IdWjH(wWI z@XUCyvXO{h?L85Jd0)sG52q;c&MakVD-t32$U!b=9zOQS*I>ZXhgZ4@#p4yMKk#Dx zR)kI<>NQBV&LaJ0UYc9TW#fe5cI+~&(ZmhELxwKtd9B_jMUWbQrw=BSn=_+*d#wmo3Vv@!7IQ8GXis7C?0Y^F*V7|b9XeiC`6z;5? z)ymsPh+c!PXkgc5Z{1cuR0^;oLIZE1nK$jKXIJSiaU4cdZ?g;f`cZ!$p6)gLQ-)7? z+k8*8rML!q#8?k0sMFb0^FPM>N~jb>|_1Ot&l@R+;+zQa(Pp0Rap(C;uLp6;loL zgE}M*EjVYuvjf3v3{tt?6XQ{xlVIAZ{E8Ox;Ic>jl-JOPn-FlzDuJ!x0MH0mEdfne zyX$q=H0GhN`pZHVhbYT{(2W~vRFvMSGj;_i_(uQo4&7@-JDJn??CKFVSnLghwDv*w zmy{uJ^=fw7=ZCeubpftE#j;|{Y0ooa;cAxo+4TC>jk$}LlhJA>`fb$lr>r*F%f%Yf z_z91E+JSqkZpTWa#2dh~LgMagEfge4_OCIKCUuHKRQ9e%P~%NdnH6zvW8S``2;JY= zC|p@x)>zu~1Oj>QLc{GZMDw^RGgjnfPB1F$n@^j6DJXh?;5?4N2R9id-OeNstmw&) zH~kE(+(T%0AjM9b-rB|Q%!o_%yrK_xnbtC}3DDnEhsC*-`8wc{%&}=)y8I7WhVGLd zZ#beYf17J*dTFBUb!Fzzl!e_arf-e4Bkp#t)(t_wYHBVy8Z?5hC7_{MS~hRR&ZCUE zF*&AaEoK~NIN-6wXOeIr^U-h!kH>F{eod+STu0Yh!BALGVvSiNOQ6`+ z`6QyaTt`1HV%^$f)cMUZ975rqm9}gcOpZS-{yf@la0rzD*YHE3&F^>SqN^^Y{l%2K zm*#!x&sh_#h+f2L@NF!3)I7ds=Ej|0K@5 zVuJL3yzz4M7>>3QoP!h!pJj2E-odj%nJk2QMc-Un6#H;2myXq5G<`F7SfyD5bI;6W z8~K%2%;)$?h1L=_ZvkCeoolY7_r5lrq)cD&e!A+>y9r?Yxn1A?E_5)yxuLuI3IwbK zw`TCY>dKV}v!}StWA14y&cRBt6)W0pnm#|`b<&;erqoW#6_`vkG@Lleh?cX#OLI6* zI5AqSU-5nb%Z7QD=1{=cJs51h(m;oy|B88i-)hy@x-2GpHZS|N4l;1&yxo452W!g; z7Y|!I_*^{q_Mf1AiT%ae5!U;iW*ij;{=4es{=AD`X~7 zBesxR&zuwJI6i>T_Ut7Pl zw|4)K&xt}w(dN~o%L&?SF-s>Fnjv*D1wIeNTc1-7&vgTmw4Jf#z_VA zdpfL1ugJ24x1IQ@iSS3YJ6V@#E6xz!i>`?+_o3;CTsy==shEhH&#rD_tw9%W@+$(S zchbc2yb7f=%HZJZNd*$mpJ)ZW@G^6Xp??H;IUW#vy`-^nOzCeDaGXN46Nz+wfl?F@ zU;V}fE7Lq6(U-|NS{1&F$cu3}vqZ+dvwK%wHH&D~4q0ur5lD(($JdO%JY7;f0yUKB ztq#AGoEY=gfk*<{+0RBa6STOfB(Ng?osNB6Z>YAezRWWj+hjf5x6T=X5zK?4T2AXr zBhtG)7vMrH5{2HM?Z%KYjgj9IJx_$iArXl{6CblSeRxV8-71Xq4zn`R$uRjHf-iK% z_#9n-qkSW4hz1cM`(4nlnF%RZpi~omcLfM zT04piFPxBk)IW=w*Ty+tTyT>ThlSTmRj(J&ev-@~#OG4N?)d@^P~7@f&>Anv5!Sg3 zv4WI=7KJ`H{)o=K|7CG6Y9&tOTbh_7Ij1Y_kOE5m9=u!c;mGyAybnA+-Jl#DgP%wYIoXaVR-nG_~q|rWb?nGibswQm5i2`;aU|YHO)2E_)?gbb46qF$9tsMhxu-; zxS?>i4Gb5uaxyY_vupA#McUO8<@885$$eR%Pg5G#V7Z}N4}Vwtt^uL*J@vPo;6Q<^ zp?q6DJ?2>}PJ7w48&Jb)c<%7jwDcL{J#S z{xR}{m%V5 zNhTF!k($-Zx+Uz=axc5%z38+ummHp0z#>xWtcE3{!g-n7ZM$?1(H-`%eJIpa@>pB( z2w{7X(nIv{c{nN-lW92D3w=I(+JWrFKu0#QFBny10Iq}4u*ZP-O>{3D=DwX{IF2i5 zXu-~Va)r?>bT$*N*u?o7gBMf5SI~!Z=SkLPHuC*V06C}L*zP6HX5kUv8ZJ(E+$Lb< zK$S_~W-a@RMyHHMIp#=T<(}^|DY4PW z7Xo6!zY0tLLf4tV^~8XwnEaT{gruvR7sKi?xTs(a7t^fq zyf&DBZf4~b&7|?7cR)B}B8?VmCqs&{FptiGYu|ulEPR zPd%b{GbiWlLY-W`BCWzlkJ1v!s@(8SUrw`+33w2Lvtj%x@9tXf%iD{BApEMTQ~6mE_iE5iw8in+1U$$SN(awv8N~3bfh=tu{*BA^zxEbvaUbf z=$P)A-OjZ)J&a)w8 zekS3EOv@`SVeAs8i&c8U{gna^h?~P$aS=|L|Iq~*(lxUgrnr%7a?j6L>J>YJYUkpk zmqTIKU;o<)m6?B~Gs;*rDt&`P#_7ZjIObZr2_AI307nAka(6yk4rk+ZVlPlYb4BJ~ z;+>;5!wAlo<|^-3u@bG{|AAV$Uu%%<6dXYABxXMN6vu1na3~6(qi2qsu*(YOK3Uo; zXn_ufnQrFl#p+u*NcJ_CD}~;b)os96^vO_rw8sr4bTocl6urKBqL9AQVvbbnbsj7X zg?=H$zBr8;eAU_E?C__AFhF=_A~V8Qk+ExykaHdFq*bC9fy8bPT9h4iS@8ZXQqe#h z(3%chkAE!OD=0$B{f2@qem=&U?PT2W_Ql&Hv>3f@fFo#U^UxdaQO2vNY*@zS4Sc$Da0RW@r8CJbV8)vf+WPfli&L0va@k=2iw78DvUaO*nSMrEYwfJ6vW(DD4fO9K3ZH+OIKLDQEz52#pa$No7H6@nUjlPL(3LTApp!876U$a28?;Vz>|3S5}L5|qTxUuZA;^KBh?OP z>|lE`%2dt_O`qT!i0YM86g_4=VF2bQseMsJgB z@r<9%k^b^wOth2I3VY%(7*@#dXSU6t65j964E-oktPZZ1>?c+(JCJhWYz$G^A68D| zf4aVeFFKh@uZYb#bJYwMnzw{X6 z;KFd9aO@hvOqiye_bp0(cpY#&_w9`1voTRHCdd^Xf`1ErS z5+R^!CSx*@SVHyf-K#O%qM(=<2YSO+t+2XG1V>ID6M*ljU>8j+MI5y5}Dh&i*`X#DG^wuCN zIl;KK)qiBkMIk=vz`G~O9SKaW>7A{0Z#<-&Mv~5m&YND*&{#FR0f{zFqjR8BDd?ap zqd0QNfh~Ybc(sT{}8JY)Uc01m);V-tLESG3r>`$#fVy>2EQKv^7*FZ-Z z^DVE;n5MY7|9fF%Xob(7d+NYx0{2Aa5|=NN?>}fxk0LB+~xy7?@_Q1MN{s!rQHpwTR3x`bqX^KRNB)L&`AFrUET8amVeI8Ta~Hj z41yeK!C?gg2t;Rpy&m_-^YAO*XO5;bBY|7I+kMUII-f?#eK%xH2`Sfbj^?by1N5i6_QKx_ReEX#R9gr zvLA`bDn?%w8N04@R=$~wT)SS6HkX_TG33x++;;}JJZ(dq*s1kP*W@W{WAtrLLjVGm zj~8aXpJ6X8uBlq-4({34Yc*BiAzK2@4%%JNHnvux>(2SQq|Y?`z8 zcrcGE0@5UNFZ4sB%D%8;!If#PIq@;Q!9v+@I0ur|jH@`jUZpl(J|F8CGZE?O!P9a~ z8FA)%QG5ve_Lc99)lU|$5>#HxZPUU#N^Hnvs9!8R${s9UGd{U(FVr zseU{+@Z1Q~>iXP@?MgLiI=PMd5}e(@o?oOnw7RmIZ>Rcl23G?|n14r1Qe|$x{!FlQ zklibZ(=DElXO6CTLh1oYB8*^n5Y310r=>-$`=IXm6i1X<_DPkmG@1Xve7|FfwjH>) z!041S198X1J#{5p*1~eIaJNbrC-X7)6uSVpzvj>J!Gd4)GZw3Tol?Vy7EE@!>4r|9 zJ(5(;GI=&Jdt0~n`&5QT8L`B-FfI@-BBFaZPJBubX3r)J%gx1d11QVYcS{cIz6HW` z$l7;T8XKGpmTTmwCo6@|&ILhivw19-QlQf{wRTDx6tdC>$0X>9g?h83t6vUUg0s^? z`iv>?Y*DJ~%aQ`_4wUCJtHd!?(J0&UIt6Dx?Tp;Y=#J%1{!hAP8T%!p4Pu!-2L<5| z@Md-_hhc!87)~;TdKgOZ6p7cQ??y89prZEQCePz?aqDyXw^IZbr*M&Vp~j_5;L{HV z$En-rr%)0+!Wo#XB*~jG+fg?or;fY@GkF4jF28SePSK8hZ2R)wxJa{dwrEpG{}`CZ z8%HA=a!IP-B5^8->U(j|da&IW@CiAKWInzQQ@!(Z9U5H@GJUqaRLrbgESB@bftN@D zdpg28hKuQ8_|C~nwx8itQwFrFK*t@e`CR-cj2qY`3+{`7G9K;|`{Vhav$E}DyC{(j z?qejaU0lNhMm|2589IG`ZiaG}@13*4@IOxG|M*SLf}SQ7ME{zcYkLDaDP}Id^3>qL z5WQpUkC!>wHJpk-Bo#CLo4{J8t%F1JLj0Ks5z-2@q&QlYRjifaB(~oHRy!dkC{O3l zN2H4<&Q**|g1uvY-5KhI@kJatG)pX%G@Xs{G~0I>sa|3bV)U!yr5;1X$uCNU^wy9? zpjZd0t$6F6R$bx7X1Ib`>CZ&QKn}Z14>LUB0k@Uv z@6Kf*3vF3rzt>w-7-UqY^D7?mjW$CZx@R!}qY}V)UtI0QbKJ{;@DuIdrG#*oRk)~K zs-Ch0F-USK52%iNi38VN3R-=B&a568U2Wfw0)*1W<)*h?1YQvja5vO_V8lwYnAa{c z^~5Qe_mE`(G9FE93+Zn(d@J2>j?z8^;W=;%`6p$Y-tiEUhbcN#I|kub`&dEGRp=>B zLc2B-o(aISz@_=(Zsj7L2F_;#R1=0HSGKd#R=wT{&Qjag1epC8nSv>~LDfl!QTkFL z$O^$}s}vhYDVzm-pO5$X>b&DY<1NGQ2EaF>4E5(Y=gvrLn$x8&=DDo)e&pW4@7Vmu z_+lJ$${vVu9WiBs*@GHisydW(O=C|~KP>>VCOabG50Z`>()$1j44(lee&HpJaH{fb z^Wq#275`TN5Cnn4>i-B?a1b#OIT%~R@bUc@Nb!GKf4Q0dYx>vv%gy!wrvDCEaB_2U z|6d*W{|2(~fMmZJ%!J#~B|BX2a{1+LBO{tCv5k%fBC7Tgv|17ja`?Ovn z5O)$Zkeqzv%|9J9ih+p@1jY&6l?aP6V`@1{5ekJ#^cONy44_Zjaf-``$zC})cxPt^ z1PK!n7;Qr-E&}mZ+%N|SGy@Xu8r%iQUkbvNn4v+i6dK79L|h&!UJxamifa@%I2>35 zm<$BQ<*A+K&ebijFsOPNSOnfqXb%459a8H95rpvebRWnN_%>kUOY5r|dGN`D84O0O zqy3kzA97tB5MEFyu($OF2o@n6A&`^Xt5_%zzoNzy5+f7{bYmaM=ME2;qRJ8^kp|4q z(kZYQ=@t_K2m#a)V{CBWhAw_{Rdoo<tg z7y28$cLC`P5bg}Rr@>+v1jTiA5z)U3dH@c}WT~K8@FR%&BMxTBv=djC9~c%L*vpwcJ->^|;l&{bI1mDm({oc_~+OVLml z`T_;`D?tYuNTPvB!pMLeXb|1*+THv@3a|%#^r#G{#RHf8ZrrRkdAAwU56}+$n0wm; z{@#|sbTiY%>i=q+s}(9DI$Oqk{keMHCI1mj{<*mCd;je7C^?A~{hoFC`SlubkAw-f z@S-r9>cr2iAyN?1i37g+Qh?aw7%&_gAcupp57QNKFZAi%2J~r&bk^sraR~0#>mA^!n|bd6!5A;mM1bF0ZgKsjGCar@DSPea`p2bPQ$Y zEjYuM7*;7(AAdo4%9OmObE0#g%$Cm!i}rwVP_4ntY4ftxl(YwB5SmA1SwVx4%`sNr ze15`mQI8{^4(veJ;sf7cnOT$^@;v(Vh9miwtRzpn8TJ@q`Cjke(%pT?yHVW_;j68a zZoHRBaaHxts?iFO>Tz9)oMXr3t8=1`{8nUO2b?xI=R64dvU|~s;&gGU7(JwIXT)VK zaok{81@{{LRSM0Pa8a|N&}Y2uxYBcDc&dO;j;VZpyY&}3{dN-fs4TS9zuNvdvBJ0m z^%9rzAob9UeBkxaU#|Rk?PDr-jfLca4?|iNf4U(&!kgvuZNa%c`r7{|x4C>%x=I%_ z%>@I7aNp*TscoU`o~|N>aMuBuoM@T+LfxIBE1e}R@qwdbhtLQNW+;JUEjK5d)F(OY3A|I{#^VrFTM0We{aY*FVv0LY`6!~k? zwCeCR*eh>j_h2gujX#Rmm8k@sw$K&eqhlV5bg_F18c#DEx5gO%#smKoTHUpj6DxfH zCSoCzzM6tag<~Qlg%cC7qi33QT}YQ71*XhK&I%mFSS2NBp}dP%bm{NSaiLiqZrzEk zqom6J90eFCMz+YPA=nY4bcnW48u`4nQc>H!89)%GXWn5KDy%Bkv;$DjcAUY%S+A))MEV70U;`G;4-Bdxqi1jZ2qBZk&efv&+l)56&7(dq(a*{_#CE# z#uKNt1%rfbo10_eaa+4R8wP%F8+%+QX!9gEUqt8T6koedZ1&Eyw_fZ=Nr8{&Z3jqp z4VZDo01yCp+{79DlmhkWWa3>VcjP1lZld!=5ML`-)+7a_^jNa3x%lJZhmvbXR<$D* zEstMV(TmGt>?`$>wI>Hqy>kA8v2zF#MhUib+cy8UZQHhO+qP}nwr$(CZFj%BnV4C; z#Vjf!D}+3GK4X7CCV7wo>J(R2>ks4Y8^9U zj;BHWcGiU*w(Gnz?%)mnQX(x;vE>i)>^sjCfnQWHISug5O7RQ<*L)vWZjs)(| zz+Up)4q2BmNfA0l|9NX@8Blc=G1NnNZ+hA1%as(}*Xj+eJrGafWzOeHfs+Dfjt99Gcy~GudH}k(qHjHF(aef8G3I@>`z$ z&#Zc~$!Wk7{+aqyJoIR9A2o}H9gAxRd}KMDF_ncsXUsmLmls?8q6{+Hsk^ow&& z9dA*`BBWu$PV5)!Ftf%W;*0Q@umV^J!WsckgWHx=8U`u zpN!CSzdM_o0Ls_m?pnZ^fY9~om!Su3jabTvx(I^0aL#0tzym^6u)%*lDW;Ghm?KB; z3GJ>;Qa#Md-y&HbIaYVX#581Ox{|4LD>*nfZ5MVKGrdH+14k5Z3N>di8dhFwIwujP27jT4%OgoM0;WME#%>qmTL6=%ZfC-7AiXNy^Uc3=g%-t7uiraUm5asR3y z8e$hsn!!;;HPEUU9$$^;x}@-eDM}Fyy0n@ZKoESxX|&*hd$Ws4sJXQezf>b{Gngx9 z-yuxc>v2EfoVeh`Xe3|-Mn=-X1QxI?^=JysDmsita>Q7H;%*aNwZ4K%SG3j)* znC$DWvi&Wu_@StXK}{NxSxq>edMX?^7tjymAtNohx-I;D#%+t#8J)WZZ%ZytIX*!`@Z}i7ww-pB?Lvtd8MVgfD zoP|z4@A01VhF2<(hg8yr_}<`6rB*v^j&JfqfRmavB$cPex^ZkyvPK~J>;i%8o7WZnF}v6ULF`dC=Ww8Euw zm5BFrtjW*aY_~%1c%xHWWE>O1RW$EN>g>53xIJVV!CiVYu(vMtz$(-w1IrPU&7)C+ zpvX=;H@l=*o3|zI>~D7MKUk~)XFqK2#yauswk);}JW!v>-fjH{@M=X}3%sv5e6@^x zP{Y_}19d!Ixri{a!Rvw%P{uB_&%Pg(vp zcd*!dXYRQzrpM`5Dg0=0QO*A|^ghlnA0Akgee0Ex=YJE8oXqx$KPw1AUb&fK zWt_#e0Rz$xrVSCV_)E5(%}ra7hxrN76(@P8(4v)-F-MgfW|&MTvQvKF2mneVl%tAF z!P6o<$Mx_`*daPg205(R^dWZ~y9DeCjeX$OQdE%LX*&5b5f1r2upP(L59A!HFKhl# ztVto!H~@VBT+_s*_yZ}JS1$cR!1Ktm%Fx}44FJb&|07GVIT*truYK4ItU5vN1*(b+ zR`nLMU7mKaAtaVEiTSOBylbF+JV+wsa~MTFQ5e&CM5_dl0If6)OoEcFz4>kWVXF2w zA<2!nyBI{DBJtw82NGY!LKllW6Y;UnK)P%=RmF9N_|Lr3Npqd;>(dnKH*os}rV)fH zM?Am6=y=oJM-$@Af$z%Gqq0bu+*_|v7Ktc!$Awo|E`k>2DkZ@N>=wtJ{}}La6i46G z$cjn5n7lC&Nu!sQCw8)@<-3is1i$k=I(9Q7n`z=#SW)9-TOETi|5bs#0rPOcS;stA z?0P_utv9ZvU&NB?K(oW-bA>QN=d@gHL;7a=LdEF-G_xnv_2}DSPkD9@%!qoNtYtbiSxE=k*~vC4#UA~ zV*0Z!o5oksVH$cV5!nQlpVqu!RBPSS^u0h}6KMaGSQu5w?-W=eF3nb1Q|ZDIdl+z% zMjNt;lkxR6^yz(&U?D5I33-vMM4aQM0r`WUFBd}*fm3~_@dkR8rmPos&9FNWeQ0%$ z+CwCTF}uzTeR)y-f`V+f4s$xcdnYPFBD3#=gv-7%hw#jz;v1Y|IP-b<#NbGYy`?c- zrGefLX_RX^5#!O*)NiEA0*Oq*aNkVkX?xigdqd#sC(jZ4BeA*`Y0swNwH=h>mKd9% zaBT?7W@zfkDp-laHm7-(8^&VxAEjdpkJ_FmTz+x;5}$^$qV3Nd#LSaro~0#pQqh3t zQS!vqqo#9@T)vOa%V#q1=w6f;+N%F}t!9GctxWJeE|uv!gOC4n>Fp+)4l#2e{zBX@qNGj|QQPW@8| z8FHyBq%@yoz!b2FDA-W=47F3C>HvycDp>giYx7hje78bvh5($)3Qoo* zG)W~w?qIt{FwWo=Y(xxX*{=IBf|j}_tiEtS5}DOdS=(csX3n*8nGYU%zL!ypBAhXq z2ccu8T5RfM0Ddspk%u9?ItY&4V^Jnrx4Nu14vJP5cS>e2*8uw1XxQ)4v|{Zy!M2c) z$~;7KO*#4#Ri)D3GnB{4;zui1pMiyuTQX(Er}$go_zE-VyS4&z67=i+@euB8dAY#5 z2x6UvF+q*O?VMv%&_3x(y2Er)nrO?9d@)D(AlL@10ee|>tzqnJcNjgzuQPlEg)awB zsHW`;$uohb|6XDwbK5Y2s^{I4BY^J2XZ$JI?9gL30{)D#a7*sWX)RPizbNZC+mgc3 zf)FX1PShwELoil)K!@0O3v{~T_t*=Bj*M%$_}-A!c9iaUkpwlbk&os{?qsAjBl69} z>HO*!t-u}ny!(pcKe#rD3BGKx;cc$!F($3vN>9Y+*oJrTw>O*lKM>W?7EEiAb-Cqn z`}itv{U7fHv+vQ?u-%SXe5scjlDsYxzL$w--mzMSi@`ofzE+=p!3wkT-%i z-@-_6X7IVbD{DagekYj%3t`oV=A&Iz6>@2lTSOgJL4)qDjo=~MdKRY>cDs;8e*3Yq7K^5KA)6<&$^e?D1Q4g&R)20kSdRp@mX%&#}3b)uJYda zsp0@oS`tQ{>55ZgP*=j2yK9;(?#Z8D_XZvR4bLy&aciD>*+F3;vew~QZqQhQ6YsG| zD?R4Qt*pmUh?x!`Q#$Xy_AQz(SGkfK@MNgj5p}{COD?#U(u`HQo$$Q_?gp6>U$_;K z^7WJvM<_j-%`oZ-u^)8ZLK((b^xw}~qZLkhtbX$?69T(7mON%{Ltn@bNY#vQkiugL zmVM?*>%weFUPTJCEl0E1ot(tTzZri9Cg4*!5(A+W!$*^k&cg5%3+K7>XerLqXH4;K zZ`fMsSEZyadU^2r_D+@?U`eSH@Vdri_Ye)%3y^57CE@bOSHte##&=--Zq3=^&ZOK~ zv2wH7)|2&;|M};NkcgOV|Cfh$(~kXUKo+KF$%4C^?nia4`NYVJI%v&n?IGp!HLYTy zt>spY-~P0NpLJ)%xn%8D;^I9eexy>s2#)^OeX}$NV`sLQbQoY+m zQHnaC#fpRuyD&K9+uKa2T?L(kj-T9%w6ot&3$5K)7H{eSNZYEnqTwU>EBi@B2d5&e zmYvNmA{HgLjPXaiorvMzb9%`wh3wV!e*SwH7q=Y>rwB~vU5I=SPalkJ7}}euvfEO& z)p2c(1O<1FX|ESJw+apim6Y_jl|fd`Pbs8YbdrLW)pkJfJ%rxG&K39o2M$~vPs*NK zSHkZQ$D-s~8iR0>cXP(G)^l@i_S2K+vH{#xFa^7-$0!X}3)B4w^FT~9ztjq4dD)pZ zM>t(RsDzj6Bdi(MCjvxzL{%#n^qr+{jU2QTAGu%Q#omv~w`2DM2Zou_zg!R`^TRFL zpZeNj1fK#G!Gz#n2XD*bHwC?y!mpv-EW?R60S=NY_^gRA=RRR|QmU6u4Jpd)#Y@gp zTjOR}tH05O8iwq*Wyq60P`_MG(7*N3@~5Bf$AFLu^|O-g<*hi%I8gIy7K6aFH} zHb~eLAfo8~9^wEb=M^!!c9}~%6;fpWzW1Gm?brjMHDm}&2k2AOj|=2)18_9&yY8>~Az`&ooF+`dP$JuQhfB?kvxuh# zBbU>s4O^t5RTfyRH)>hPr%|MpL9(56rEXP*r_>Hvow?hoQ~4NP-McrwhgD!&Z|ocr z$`|*tAsRqjt+l6wy6|;WpAWgMm9!SVX}3-rQ-r#)YSYz6EShO2z7gN4{EYYFsmxD` zmhNVQ{0`aa^}Gna*OjOR`4aL_T0gAIC!%R?;5jMPM`{nIdWq$WN9!;Iy*&VW;e2EbpXY%i~~1u8Cbz$_h#0555a{JOr0dftnglK)ZS|HsYjf0(<mo)%j@Ix)Qe0_8}Se%waWD;Nvj(FCQ=O*25zLJ3qw?iA<$8Zyi>L{JNw#2F=SgRWDiQy zkgx8GhZ}fvDY%m&9UGV@T2c-{4!1CG=-YqBzC2~ZJr1}1O0#N=7$Bb+%Y!IwamtY8 zy%0~^n~K_UKIZkzRAZ;o$(0YVuugm0hnXFc)=^?7uKGt;lp#aF2-AG`L)u8E!;w*Y z^};U90nwjp$V;KMe-^mdI3@&=m*{0FPss!l>MdRDQ8z?Ea2W3!L>5#s(Hnb3R7S%? zG2|tT`ufpZLoV(EFD6>5!Ta#~ObNH6p51(tG>#b**2pJG&XZ<6(*3F=98`H?QaFYY z0m8S=lgT_nHX73^e!r|$?;6oGKP=J&nsZRMo96387HT8uxSnwDzs zOC-wg8;JPV!C}P^^6%B>9_~?SY~DSEIIh1Z z?nN+_$MN&$;oLnkd0n}T` zS}5Tg1m~(Dr^UQM0&!+A#{Z@h*2|qU_5mT*0wAf`QU38Si$g5W8>Vnt=1nuD3@J1Ylxy-q;z-$P(Y%h`3$c=P+Tql+g{(2gfNah$q^C7S);IrL(TIVwKU{m& zu=Lz9$LyM;$CeQBTR6#h{#sb;mPh7rW+f##wG851;Y-hvjkQI`jYI*^w%TVmaKj=9 z$+RbY7_03JInkIqhFU!y-yk8D4@V92g6yD4>d=3ooZIJZru{SD$3sx+SpWJu3?|K! zl#kncwiq90ZjZK*UstOB;-qWO0^`qpN74>DdAsKjH1(Kmy0jQ_jO!r6L#A2Jcn46| zUiRQHG%~qAm`96PgfJ|N8miC~KH87QUe3@a!J20(oeiRxWCEm@0z;>P1_z+QY-^rP zVdbN|HgaC-zGuTkxj@R-a3~fcl3lmp?6&}qsubbtUNPGMou17>G$-}vvyTUfO4 z*S_}qjg&WY@|&R}fKb1O1r#&QPoq*MF*=28QV8_}fU#RmcRj|>pp z;|YZ~;qy;U;~GQCn*x*b_w%DGYf6L{r7?|fj-pCF<;4MjL5l*E`2+Ax?cD-6faf!f z55mC6vpTf^a`I!+OkV?LB0wX|uUz>F(nD;ucXC2CHhHJ->!)2KiQ@=O38{e3vt^E^h{)!H%EebCd~BsS3+rLI6Nr52E(hM=uYWi#* zb~0WA3(DU1e^mU-k=j;Of@&1q3O(%GA45A)Ltqpj}Z-s#I;^thAVg3Ri z3b%)O4EdjMfBTQj|EMnS&zCW54708f=y z7k~<#4%|N}C=R-RZVdANYmeU2G~aJ&|NVvvzBLd4#r5@m=O38M6)tL zo5uQgBh~MC(=Uh73jw1X%mMJnr3OHqgMdc&3(!;# z*#3j~O2axl{SE_O9{z-fm{~f7hp?eN|F4>S{jVzD!9&n&`N2cjOypxc3Qqm%!t0h- zqj&!ELkBhi>f%WMb9qn?`m+y8h5gtOHJ2X8)6LGF55)1SD!_@IUxWMR6FNHhR{QKD zItne_hj0$AK9HgiSw`*eEO0B=&|0=vB?hbn?~ORP=g=G zgPX^&_2WMe-~RKTclG=Z)t0xL~@47 z)@@@%y=w1y8RTuqz#!dGC@MtWT3X~-%Y2uAZaBgU;l+tj6jr&lN4r(R=!?L0vL-jW z35n)(I!iW+B89~^KD`k>;-Rgg6+FbY4`EVe5C2bOP7H>U4NnvujPEyT7tapQ>{dfb zs6?lFHCKE3i0Oz{4s2ys>01BH{#jCGB2~=!2^C`)#45haV>wa~Mai1lB~ca6O|ST) z*31P%rcZCZezBW;P!79HFZ1J`->t@v3`{B~&P{KUtXIalL**++S~iL@?v3$7n1o?< zV2gZoL*qDVB+n3jWZuKYNm5VtX%@Jm7SR}dTpTvhMfS^NxkcT4I#x?<%WtVC&* zbHy0GlSZuv5{p%(FfbCqX-{x%Ws zRK_E((S3%#LMC}+@2hnrjAbeBA|44nh9(P_N?!re5I-N>YjY6!ymLO|B5V*UDI2TH zt`!SE5IfgrIbzdsu5P7s?+~j3bY{jI*f~rMy_Y!kJyTnNDYNvo>MhmPKo3;oek3as zqy?n)(PHjZj_YMU)}6EEgnjhzj~3NT$0dCUDAgU0luW}-;7uI(;L**$_-A9Uxj|<6 zzbb0Q;LUDxA*g>Z&E1AIWW;2Ny&XwwUEERNzzPQ?Io?O7gZ+O~cA5^;7B2m+QKDRV z!2{`yv=mp$bs7zxL0Z^m8{3~>qfxnUw8u4y#bK%4=!@-QZl9u)Gwfapg8eKb6KS!9 zM%#{b!N-H8<6)d6bi#-c69Q;vqz z?RRGyoLkgC!-ea*yLuaub(LGnLZ5 z!%q*AH&&5{Uq6UQD}H$w$Qmo%yT7!cvVQ^@L4_Bnm>jfuQ%2~B;|+n|5S(x0U|m_i z%{-ZYyO&GPu{OAC1J%XB<80b!@g{J=A4UGraMuVE5k0VM-*ZW$7>?md!f;N&2I`p@ z3f`BNRU#OhIWpQbD?yyyOGii0e^w@nLxtFQlYP4?1VYLXZFNrCtc(jS`>25Unnc5K z;a>xXq9w&Vc+X8}s|}93mPJFl6DBB-E^4!NZbulEsNpiWsB&{NoKIbLwjh7Tm#ghe z!~sZ(u;5N*2!5(u3;LRw@#67E-T85-`g|Ki58B*$1oZZ*bQ8-sGqoS zWC$~tSOrsxN?YEuP^hbxvyXPzr+?+RnDBe-{`f=_+N7Rh8`(M}a_9QYb-Jg3D>RF~ z-b+B{$zAXXIA(^WZaPWTFhD=UxD9w&0|Ev6I|YNA!dx!{f#Y|Bb}d$y2}3Sn@~PkjWLdscUfJ?{H6qU4$Ikm=82u8%3#;9GVL>o3;VJDYKQ;AwF zxO!gC%OwCaEqLxeblV1wD-@Ef5!uyPz=Lan9oSO`&ssPZD%<#==n7r>0Ax4aYkPTr zq|{;!PD1`tYT}G}Ii^c(!F`8Iuu#bd32Qr$CE5fpls#?n_bDFzcF_3;b@~_~9 zEFdHjp|>hMmp6~?b|oM)Lt#QU@B(kmiMqCxPtKwd#2u5$Z)M-&r&jeSRyZZEvR-l{|{;_vs!AbEp63}|(Eu*FWQ$OE5suVd%o*^-)b2LgZdBV5s3>reIA1~;Cg z?GQEQ1e1Q6MAzI*C0S3#KZ#$ssUD5?i!+i|M>0K?1~Vl!K=R^fo{`(q&66PXTv`8i zuzW@#enLJKGt*JS;z0*xy3xmx^q{I zV#B_AIq)UQcGH=A#0mv{s!M!V1A(FEcR1>+F9*MvJ7egZ~mGv_ayH z6bbJ$MdyiH@5V%c1y^JGWFfc`BXF%<*@zPZG@`zgB^o|tbbUh%B}3vB$uha)1qOZa zfVj~5yt=^n*{C90JELCE*E~Z*=(gcvx=b_89O2`{q`~5i#$vo>Sg_1Pv1vGNhFITp zv4fOtm&4bH*zZcL>0Jp0TL1f28MJgkMe}VsZl)EZNz5r_SJkPdwwS{* ze*RBbo3v0F`y$vHtHAQyerq z?DUrHvc5RejM6vpe@{to@%LyBxT)s66PPDW>tEuWN1H)$jEgCs=^W_^u(gQEguv^( zqrz+V2ik1ZnR7jrE+YRt)VI=wFHAnT4Ypv4-ZHpYJSDlR4k6A|RMYI`6%#W~C*SMT++*xi9Y4;L-uG8q5wfJyN=TSDA-64I zift=F`u)&%{rBeS9nf=%5`1{aLMNcp-TH&sb^pELj4NHNm$Ss1q;2L_$0k{Z^-NMr z#tXg3g-bB;<-xTkqs|X>DK!4jv#^-x(O5GFAWH3suI$I^89|!Ln;cA@3~--c7^TEK zS($6aet65CBzvc$3HM+uw%}4Ud%m_0Nom_HZI`TQmm?8w;(0lIGI2YL4vd38Iv}m& z(B^aonD$+sOybLRr9$T{nB|Ev+(58`06C%XHwge)H3dfasq644v~8jjrKDD85C<4mvQRW@ruqfg58he5mr2>{6=5%qIQH5B^XS?5$F)BiNmQX9v>2MdaC9GAhrz zn#x_FlCnIvd?>=sVl-N=&VfzrnIXlSMJp5Wk#BVN@z69hr7=%tSvN z5|LaeXPgi74D+uPUuw0><_B(hRZsQadK~=`+TY+H+||l-3}8lbur^GU2owz-1Wsiy za*0Sd{^`pDhK2NeyLQ0Uc7|1PUu3`Bpwh`-4Y!vEDzr*;LHnT!2uE3dPk@y+kC7>) z7>9J_jS}82);xxtbrzoY7duG}%OD))D8z)WbTp=NL73)?t6Z|j zg`@XQOnM(#8MP20?IY~`o+p5}er_|*k&MaWUw*B!y7ayX*G$8^TkziR_!qWmqrFBv zOPj(nx|uK=i>4!|fG1lUNrd$bTNT*NRbyJu&bLcP$#HJf(si+cIBFTnbM8SLPF=yEZ%}l7Xd+z{1)(HjghfUx~%r zy+$Y?R%S0^>h9}lt}l0OOt4pwu;_;V!u4}eie}#5g0W>$!9Y!?Z5wz?4`ku!GvZ-A*(7y+ZHxpBlPxi>z9*4&aFs*RzO~c^vw+oz;A* zg^(Z%rtv2=zIYO_rLq$XP;ESMP(!W?J;BAv*{mJCwY-W`Ci+%&O{fhyK)4xw21`&J zQZS)F^76`!y*vcESdsGcf`W7Fq0`qoxH@i*017lU!d1-z?n_DN5N5LJA%_l{{?e&WHH)tla_N%{? zY#-VdAgG;@LJC*b2~Bv<;-O;7)vj@kXjU`5<=*x*sU?e$V6iv7-m+JJbV%>KCre~= zH=+JA`j0lm3*LRx1i^29qRBUTgZEu?l<3`>2}t@iAnBT-9GO};I@chvNUho>pnRD| z*2n6+^N;c7TVmEs6ye5f&zIX@G>r$O$I2oZ7lK)AAL$oKJdWd@qmKUjg7b@VdOH_N z$RxsxgUC&3-I3}0tRPWFFNZay2Gv*RjovOl%_dxw7q}q>VR&Nm(t8&g|Bl++d~uEb zSpyh!eA8A$@1h>KnKU0$^9khH99{(W>&(?4>=6E>_|2n>jktp2&l57w+TivVnu;F? z(W*D*UkSpOFw0(X5~^7_&-jN_TK4JeZYwtlpNxsZBFX;ye58~gq_Quu zxj&L*iLDu3pFDG5#*slw)t*}ZAS|BM6Tw8Abm*&16(DArN;x0_X{Ggr^<=8}R+!+1 z=BEzjJaF3RMOYSt`a|~lHn2)|YfsQ`wRRDY!bFs`65O2kqEy;?tIRr{d_R)eWk$K2y;Pbewl;d;}?C-O(+v z!_~8xhB=Y$ayrBhijx{cWy6W}R57EPp%3HLbwVA$R1B*KxBn9HSGT=|JLqt^_~uqY zsI%L?v`?u%D=(gyl|>|z_60KyeJ;k-UHZ;{7R@w*6|J7hrjskTdlx%3Y4rXq++PyQ z<>!*;5*z+>%GE<>W~<*~%F>@-e$HMX`Su5^wrBT4{R0iaI>?qP}M%iW!)E@`F;H))d_B zY%t=;{{C9^Xyd1*LUbY*g1_UrK0COdWy5bA*~UP{l&trgoU-0N*PZo(8aP?0vT@s` zeSuov#wBXQNO--%u+XJN1#cP9owDg__Cdw8k;)!U6 z*?%y=$P(YS!HR)fL+Wa|4~C?!#!YaCL&-o|7f))`PrGG}e7@Q^6-E{ex`j&k9as?| z*6>DmT3+RuA?`_@>y$Zeyxhj`Kc8k3_m6jbpMbw0C{Y-3-Zy9jPMJ;j_zh{NTy zn7~z~_~*Xw4T_Qy$0s7)QdKJ8LdzUXvddf*39IZ4QM2}QQANh@BG$sCMOL=n)`uP| z<}w1F9+@iiMGgZb? z7WFAD;x|s|Dm||fCX{m5K6pbjPa+EcsSC9l&c`~IIN;U}+UdnMr~`o0sixhKI@{^d zIk3#LC{dgZ2`rD30csm~ou)|fQ^Q}UYm@fcanbSsu5@6qvW9xY;1**6@WhfGoBqJJ zpTOMLyP~6(Nn-xc7!SUV)@sk&;*3`j5HzC}S8G~ZPfG~8i+aOQr^CN^$2M$zc?X!1 zOj0FRE+lptD^4W{dm3OO6c@9D0Y0Z~^I|$w-I>0fA{=1pBa1YHx5To%#?X~l7uDf) z-Ptvust5>{Y9Ed#jUo7(;;(0+hz?Damg#CL=cEefV5Ze9EG^H?GYPY?hmm+ld+)0L zyw_NzwzN_ZFg0;QMTrSY$wa5U$QZXIC}Pltb_nLawhHDSi(o&F5|1;8-qkmuxv%-1 z)K94vKcvX0UB4YdA?k|9BiZ5fZ!MA^BM`0*%-D~ws&U<+@G4~I;}VY!!L&oUrT#rl z*d&&K@!#hZxlTt&eVF8%UX1EdF(SukS7tg}XnQTMI~JI>#BioY8KVPi)NLBJi%o-Q zkDyAr1KU8*C1q;j>74&D5`hqS!3?=f1rf;wAW+^r?I7B)`lz4`8;mX(#fW-$=D!p; zCX<=%M`+=+Pyxx%7p0iFTWm8~@||kLd_F;)`3uzXRHtk4xzskIRMqu71ZSiNn}1TLxcx#BK_e2z#M?Us+!scytvy zg|g|zddC|uv5oa#GCezc4ZyDCU)y_4lmJX|PUjzzmXk>WOT1nnc^ma4XTY`crHLH- zP6=3stTaTIl6TSA=nav-9|S;sqniO%<<+>fL!}SVbTj{QK(-Qt;QLY#CCX~YQgyrQ zbOqZQGVOi~0qqYX*(7?Kt|mG3RGIykq6ns-^a!2l;k8OrewxzD!E~3GN5rj;c6^%Z zMS3%^m@vbPx0a34+qWqQVRm?q zM@#+?iuon&#Qmz-G?l$>LD@!ZT@rH9_LV25`+h4c>B`+M1&wGkPz7=#HHE!UX=y zS5F_v7$Xc=)hO?s1Rx3N)}S%tm2c+Pr3T@C2}&8!9dII`1nVa%ME7t^;68Ir+;n)= z*sc+-ZHcb;u=@d7n()ZvAk++SK8w+cHfE#HIHquvCoX=Op2pC)&_~XIC^%H5TV&Gy zLcb+vDUtGfatgBHx&yiV$1xJeoR{V1_KZ!4Vkc@=1%~d?Ap(NIZ%`O_96rv{DW?MW zuI&j2j0@a@8W=C!_{bP*g#lEFQ1y7(CG$gNpR&bhVa=$C_QzOKF??esv>uI6aEXo9 zFn!M2%++KxV!6C5m^buxiah;vSRDy84kc$Vgc2;eq`4X+Q+9I96jhX+lf7&?%`|)G z1;_HJNL4>R$Njm^)Gb(=_BqR!csCHMwcx8cXes5>lHleg#Ds|5lIBWiTeylkC?L78 z;?cmr6gx|9wzA8JaXeIF0>k>(y+Rb64E`ITwTz7dm)%5r{hCxQb&2?`qB!G7^Vg02 zGfqPDR}0&kbuuQ^m4bh3g4;u)fFkt7L-JG{r(8aj<&a@*<*>QnZZwI| z_J3%NSSyW%9^3Iu-~fuI>Q0i25g@8<>LSIVgfbR}S|ya;B_;OgIV`+YsE< zMsM=$qSwV|xy4RY^_$&36VSmTv%BcOeSesv4%iAY#(#tzZQNoN?c;UBTKJY-HS|+h zti&EkPEvXd4FYmIH&`AiZq{Fa(1}rJuQB;J7~xK5%+lB+1=UcIyYq!vBuvzreY=(4 zLb8^6^lyJtwWQ`$S@*d-IGGEm-Q7A;ma)*kaQ?O6MfBXpRhedw$bsX| zD4Io}+jKu=-CVMX@(2U%f)!hED0Pv71d~yGJ&Z-W!aqzrT>ee)+?Ydh?K4|#1xWGr#!{MBf{*C--5_Wc??VeBi zPY{;pjVJ1sM7&IGas%4v^)qig8den*ejpc0-q@5~Zc$%^IOe6y1<7Sf9-CYV%AI zN8^Shzo2D`)C&ka)?NA8sDm6f-7Jd1uOQL!>n;8F*&}v+qs5Z|b<*}Ltad4W*zIGt zy582xin*G1T%0(++|M@>g7^OKN1`nrT(V}+drXOHRaHzek@$GU$+D_l24?o*dfJ#4 z9ABC{-Hp>W)ion~fXPxv%^*;V4uR=WYP!6Oub&fT4Re%v17{6x1q#EX`%RmIn}`u> zoFYgHwmauuFry7;nzD||j_1<1>9zHWzDzc_C;=)Yy1c^i!IvEdhfv|FI7m@)-;N@p zH>f?1;6qJIuH)6~72y)yXN%TBjW|lA^o=5&BKLXV9V&Bel8T1ZV2^-4RCS$Q6C5Kw z?ODLEWDwJ1_b9FYbG3Fq6TV(w1V+o}z)wrflq_%`czCB3mq3pt9Yrj;TPy+#vzJQo zFVip2_AGYn%3xP=|8D3%?-7xGk?Wlj^WM8VkHag__JFb#^^rNX$_Y=Zo}K>c2UeSO z#%Kt#PM59o(v7L0VvfUp618pv6LgcHO~+tY+5*Z8d^xi$-Dv$pc-4Qt;~QSZL@iUrL(|yEvE*>*{aG1f~ zv*m6XCy@-otDH5*5V)q0J1F@|%mBV?(d?P?#w7EXeAmykiS=*A63C25zpf zwbzkglKL|fv~5d?QS5@28r47=KP^w7z+RVy-|S!(=<5e&%ppJEKZgH>*{Ae=*;*{K znc`WJQf1y7=Z6feCNx2P^#+Ml8O0nHVR9E1cH}#l3@iZx3Nlbl!g8U1z=$KV#Y)PY zrSF&Kgj33D+by%EP=mrxOGm=NB|$D*6&0$Wmt8`JL5Aw1LB+)weqvSf9@ORSd)2Q-~PpwfAsGfl!pRKt2*Wmf&tRPqw7(7ZWmkr!I4g zu+&i(V_shP%$aN{ZFv~j^uc&nM#5B!EPKz;zKRNmA+GmkrdcV}z2|Ct_9TPt8Vk%3 zpOLY`@qLje><;vCXon{We#7sl)PL76VKov>viHYO3j0g*DnbPug^uOICl{gWO3&4u zU~RiO{9>2_v&@_&3A04r{1-!PhAXz2YaQUlZ5!Q|EI-c`17I3|c6wHE5}gBKH95a8 z!ptWgKU}1FhT9*NFQDswz}4_3Sa>giZDJ$ziqw>TK&ARVJ~&Rd!bAX@HQ7+h4h)_0 zd4`wD=wID)Ua=zq1PbbuQm}W)P`wKK!jveb_MWwe;{p}h*CUnVIo6RiB<$EzA24b* z)s0&$iYCNwONGbQa$k{xgoruY?N*T$;*^MY=Y7v)z4YM_71%&lzD|R-yRj;CM7Haa zk-a~UD*eg&?KI_T*`I|PvZ_VZyNgBbI?_VMLINmf+!cEW@%ts0Aj*Ab8X1_lVbsw) zaxDlv+$$j>1v7LF+B%a3v5-=cO{E7KoFg_m3c+P@JVy;PHr7JP{tCDt9s3|@a*>u; zT=Yz@7d=UR2KVjRAPNHGe*ZI?E6Cj26xn%tzR*h(Apbk^aht`4eDZi{Ra&r3UzxX7 znU+eBUlBoAaV$PPHV{S?kzov8X=%mtgmappp?G1Mhh+NOl9pMJw!&~x=V8+j9g@_y ztoQ4!4J*yg?{nUdioJ=~`LbWPm8%N5*yiRCLr(^0K@Vf1NSKBQ#1zFKyKeI3b!@)Y?vX>XJ|826h z591*+litJDm^*60Neh)u8Ai2A*r)50HI&?|Gkk?(CkVYw)qL3SKET~D+vqYMeD>{# zd%GzZmcA}OX#lj36F{jrU&NinGt`|9lgL0|`1y=G{@O&Em*#^Mel@!2uD~7p8gCA~ zZl3J7J~n37!q)p!*U@ouYqq-a}|(s?OUYJZ73TiPgrkr%{lt$ z=+4s!UgS;~M^v$d7emrPVGHso`t@J14SaNm)ZKozkHQM{=P4mPh0w4&iopAm$cf~J z9fZy*+Inu4J&gUoD97DG%sB!45mnqG&E~t?Ykklt$~>!MDEiUupnB<6J|g`ech_kL z7;%1wRw}7_ZrqK1$f<=4I#x|e3Sh(p4_To|ZH@ckjw`h&MR&aXH(a)+nNJL>(t)!R z5MMk{ukkC6v5uE@rPoRDXfL$;BJGSw%#qM$JNBZUx(PR}GzmldLEC*|YCCS#Co01Z z(_=((j9%+qi<5PvP#13XLlraMuq56cgJJ}MgD*8hQSPhtzImCfzsvYj^xN*}!-1PP zKUvvUgZ+rX+cdIJZ;gdf`ZuBEoND|kAJKVqbu(7fbDj^o^ zot~VlByaT6IBSEu9rI>@jHKO&6?5`QEubW2DpjDRs3by16J*bUlzgg0BXV3_!_8_K zk{O`Vo?I*iUywbxVbC%L@N#YnhFmUAisCUkzg2OMoE4n8g1m3-HZcbf=e7^aN|!%8 z#}n{5{j6e)5e`8`VO75+CZ}+S9bPOoWxOc7dAgID*BG+6khx3kuG)^%yR{{ltC~;S zo;9Hep5g)dD|u0?(XjP8RVvYO)Qku5EXOcj4>?G}*JRO@H48%uU{FnT0Ii(&ucip; z@n-2CgHrbVp~g<>vTf~E>b<-8YsHkg`P$sQ?R4zRd35SoPjtY$;e>nRJJNG78s;bg zm3xg&70^iAS~0JXA6!ziBr%`gc;=N(Yg7QIWH`OxCI`=oU2x?oOZvB0&?cYmX6ZQ< z`8t_mKu)x;_7f5|zfC~11AQfH+=tluOni-WVdk5V{Q5s>0rRFgiWYR3tgRc)PTJpP z9+1UO^1W>)0)yN;8XS&$tA}DWyN4DtbPX z^HQX{gL3b&j-2djS~12^Kh0-DA%axy_lp+i73s;W)potYV9qOJM?vR~A`5FIf6#OU zZbtx4%6RsRs03Xz;txG}?so2QG?(A;uz#(lVwwveoR@tlx}P>%DJT_{v?!h|TSuJH z?8$YL{1|~l6ICCT0>Y!_2W@L%5(sZ|&GruMS~X7Rmd?ypm;Kp5hbRpS!@o38FQV+qgop;DI;J zZ|@J3gtU6cN7>fayEjowUc=?xow7dqi(|w>KpKEvGM172VIAWaa6}Ph1<% z&{6jc%(Vjj=n4FlfvYim>6?tYy2B$%cH(Bj(|D=3kH6%wfI5)TdaHX>didG?7X6?G z7Bt3B^9)H9e4IZ5Rl&d5f$B_gVL{V9*(yjT~(As&QZ14#hMBVv5bt_Wcb+27-Q zPrp(U?~M0}(3CwSx~y2AV#i@H3V~U;NzBvtlMca9@`2Z37^bBqML9eOUKLq=~73Bge6c8pqrOJ&IA5cvBr4sBE?duJ)|Ya^^vT1lu3k7hYf$#OEJh z;MJBciUH}I57Do++o_tMNtSJ!<-$$fuHa?Vfn7fP8=K2GM{<}dzs(DnA?3^Juqfi* z{0F>UFMjwTBto94E=NHk)vaHc-R1nUM==<=JJ@l%brexHg6+5O&63k|8e-MA4+-f+ zY!4inz$#=RUcwPDJc=tz4=utCJq73g^6FwlSVW2DB2@)&6H$=i_YRZ=e?_q?vTX1u z20XPF8OlyNMW&9(%{IJizxzpfpV^Jdo^BIs@ zb2;D!eV4dEUAx%bp zjib72*f`*sw+Fi#Gu@g?r2&xFb5|8*Cfcb9d#$#f#M5-q8EwGfFgclyC=otskH!6+Xm-K1fE@c!g?Aik z)0=gwx>9g4od$Y_~o8Kz2JaTqVV=^V9 z==|N+_*Lj4a=|9GL1W79=BY`WdZF+iktuakZkBaZ|I)HSw=pviMAY2buzTR)JjQ}% z@A>_nTIi5<_o72{S*GpaV&I*yrfix-eK`om-?dTZwyG!9h>OM#X->rsLdlVyKrzkrEs$2rQ z0PKHW0HyoQOGJbbDdWIoCZl=tp)pattl@}LQaOUZ|ALK-7X@l=ioZEneqz-ca2l)$ zIAN~}ES%fG&R^YGGl&tb+3(=!;L|VAD_>w$b{Gqc5z6!nWzf>33Uwt~stPtET+Czi z{3x_82-t>8YRBPYRc1j<9qIsDOjMI*)w<(yc<>j#DxzQ|Gh+x% zW3NmZ^bo2?Q|hfpq8WZCN|epbD4cplKHp4{XQqBUgDq`gSjMD`5_w8$<=+m6cVN9s z#Kizj&2Y-Ksmu*gT$b|_;!kUNeVK_k%}{YlT1ZP^_fP-`laQ}B26o;1Of3zfbStN3 zX=nYwZjTG=agoMY;JO8}ThcC*?33J^2G8T*PJ`2Q8QM&|y1PX%R- ziajsUj`8&{xz_nAPgHZ0#zV3SqScEqqy54X4goazW0R&G@bk8*&xHzI%TaP7^kev*|wybY}ibUfr)cT)tFU2oA`vP z!rc-vBnC);nPd~9V6?y%aWd#;|2uBzgGVReJ%>&fDOrUuR^zYN)RuS7&gSaB%}gbv z6|6Lrt~i;!@I|T(Ii2_7p*qI0ZCr{X42$(C5nxz6iw_$N9}N07HpixnhsV%c{T(aJ zg06?bqjWL+8W1;W`(tj_MCZZgk|ovJzr!(Vj2CK21C~C~AAYGq*w|fp)kfG~?a}p6 zd(^nf)tV+@QyOuPj~gYswUIx)HDZ*Xg2xW)o$6MxRP{D2tS-7=DGgkc9)VL1P4kp7FbqhoD zH)|kzQBDLjUi;{OcVeyeDk0Nt$G<&Ah|8i8-hc9$*xUE=92Nh=x zUH?@jmB_N$DRQgtV1@C*><;6Y-?oaOdxIzc{l-=;ImCxftH%S!uMgQ^HT`<{jUKKedxfs6yZ=RzykpwlabJqZp(FFKeYmGOnY??pQ zQIXmNX0+oKdHT&5h~i)>%n06|IA$B59GK87&@qbDDu&mfb6ggdrxi-6T`E(Zxk_90 zct*<8{v={CZJMNTJvV>U@0e_XnG-g?By8Wk$Tl1H4Y>G0lmzT6riNw3nnp#l$4nc> z+8bb%si>pTTrWid|KU|nWz`-x<>a+Kxt{YE;g9v%be8%-YY{<5Vb3Z586OoII0Z3oHeXDHWD_(U`%?`o*bXvbCZgg=^G(| z&98;EM-iEj1*>T7ehv?{N9P2Cyoxm@qm5GiXHoZ6vbK%0?snxTNNkd3PL zR$DzvZj8tRA@%!8FC$>O+6ROMf`dcJmY6OeH8nRgH5DN=N}Axx81CaxxNs4ihbNfi z#pmZBf+tW`SKsD0+OHzumA z%yrOZVspcU=+mF#0*rbmN5_2=BS&|43(f{-^Du5L*aepV*8Ys@AZiJ0;}Zy`h;Iyd z1%Hg8J|ytjU@?StV6Q&gWDt!19oQX!gLY%v444yppQaOQcsnPc?H~IDWX13cP5d(b z;nMoH2PNAFT>k>e4E!kuDm>ka8Up)*h)!*{cX~Su|TNk=;)B>ut1KWK|C|G8a@R@cb0xVrK7!VeHIO^ZT&g`srN_(eSpvj z(El#<;LC0g1Ywk~B{sPA=ljMg1PKIjuFr()M>mCOm3UA78i8+o!|Rg`L|X?d82exi z5dyiq?ep)&>7LHy8QxueMEa_WHb=o)T0~bdeUo?s*eNMRK=o%w;z1i4ADTjdXnA`6 z+UBnY+54F(wgLTCp!kVOZD-+!`R_O!nJ;Xi+Bq!w3JUzi}T{b_!f!XgRQS04d6={Rn#p8r{+ z#;4TRe+()y&u%#|L)Wu@4Dw^5C#KXR)^#?&m!#{P$k)M4YvJ8knm)Y$e79PE>htK- z3rOM|z<+;DgJc9$SO1K?Hd>f-GAaC*r8NCM2JNX{_#vb*vWH~(>9M!T(FH-HqC!(h zNssmu&H=ICpEAx0=Kszz1A%K27(S)|zayQ+GW_NE``x!nHwOeWaj&!w1uH=83F!c` zKH^K5pDFkS>A)PKUh-S`3IsC~a7IzKP4twc@{Qy*QE`Xlg(HS}42VGJFZzJ$IZ_1% zbA!-d_|H$l;QkQrrsq)l&&%YN`Xe(1j9d{7zaOv#ulKS8`_lFVELeW9z(M~bVBeTp zetdWQp_#v8lUX{XwCB3dJAM$J16*w>n4Yr*kUZOK+Rx2i9ZZ_Jiqdk+;o%0PFeYr}H%3 zC(r+=+o4BD-k%DX@5}D&>V%+weLy{A@jTd#d z+Gdrq+n9G7iL32wq<>!FotYplWg<5IjX4;!Ss@)oav===OFQYYA9EWk)E+lVX zGp2@ z=ZWs?7l~w3X=%{;!l%ib=+bCB9SipPMP5R>6Gf0(eX76V?NaH@vE7>Sbta|1j`Kp+ zca%Zxps+I?-M^zedvvM%tMAs@W0ToH_*(B$UOP$DH&p#k{TSvkbq;Ji`gyX4N^s;< zcF_|JqXmu~XcwdO!YuM4JRZto$6J=jBKrjepEI^|Vx1CX(n3vgsAs>{p{xA#N7g@b zuyrwP8ay4&s+3y!ycVlo;v$gDe3q#1TS83=v z%Nj?wEyD~6J0Ap7WC&S}4eL&{+^`Th#FIGpzb1Mu&fqsv#LRXBdQ`G~t!B~p@Eu8_ zrPIK-%uo-na?^6L=vuB;QtFHuOMEhe+QXq@>9iw8yH8e}O_1H6t3{S5-}#*7+)SO*}Ze1$RHu-PH|OCVIvd`<%qY543V=2Ag3#W(i?&q z5ZM5pL(-x8S{4KHUnflVCXA*LLz<*;WZ6YC-qL>gD$7_I??090W1@d;YA*^AG6ql~ z<93xz6cGfJzbivq^-3N*-1GU!F<@beI#HfHpzb{maIKv~30cM`Pd7oL&`QkYn6)_V7w( zO)}{@wMtkZpgs{N3rURRdgC`pm0s^fi5jf1Z%Fm&1{}W{{^tL~$o0(j2UFdjbLhM}ECQ&N+sUSa8QetafnP1T`r6A+{I~`c3 z5{A9?7!o!hD~yGy^0Z1rV3deE_FZlhVu0bz5jA4xMg6WVO~ccEg%jNAzfHFl7^NZxJa6R|@raXe--rLY2R^(fk2g2aPY|^cx$gLgc#qAd-q(e zD!vDm5={EwDQ?r_d5&U#0w7{7RY6#2I;Gx@xit<_4~f- z0S$c>GD)>yI{#U+Xs;x#HjR!bs=@IcSiTu6Z5 zT$U)l0C2~v&%Um}BdS~Vti>By_e4OnK`-3w#2p$J>{lD79L2N(G&HR!XenFt-UnL! zrcyopQ=^*^B5`alUDN@<8_f(PrQXcMtl_^w>*ln8MaLVWOq9_R%NGVn9jJ#3?t;l; zidD@Scr!rGP^>1AJ|`aIPaTsWqVK*h9zp1!nj!ieTVcHAJ3L7*Um%yH+JO0v3P@ zA1;gB(A|4#Cs>XZHCzie!Em~Vs^H$s>aFnDuUm`5TK4AA0}$1>b};VjGk&bMlB_XI ziEC{y-Dxfy9E;WLI)K8;ZRWTq-c+YzS|7Yjy3tZlz|4oNRb->nG5mvj$_IZ#JJhcZ z^{4UK5vGvod|RB_zEe*3oP!_L}_z6l6;sM4Q!yulIUhFZ}k-+=41!(lOXZL?w@v^IpNnu*rEJMBn_(NhC zk%Ko}-dh|qW7!|od5IKyqK80uc@|$;8Eo8SdlhIj@v3*Do8ggAPzp#pw#L`O;H!C; zAlxByqbPDj+=xDlMZy+YEEvPGt`gxk!S$Mbn)y@@pI1Z@ZZ69$=tAI0o>k8{c=X5W zQVCh~fH6J42jTU!v<6cww|{6a?=L`qu}S)p)hp$WG0}YztD6R5w$vhX>`UyK1IAj*fEmu;4frU}b+(A6@#8()$?p zkC{R0O~O-u{*atHQfLoTM^3lFXX$uIkgQ&Es#P5_ml{nmqMLRW)$umJBQgBDvcvnl zV;P5!n9***zrpt}(PD>{^dngs@t;n2Xy4nv3T49*I%(s+7(e7)ZW!oL+o}!99(Ns? zk^6>7C*D5-VEdh!{ISr27;u*+pZC?*NLL(eG9EtFZ>i_b-!1<{$g10SIy$$k&j zcA!gCS;h<0v8@{$J8X__%Dy;MvhNZvNFFX2B^sMfG*;%gCRQx<@*Wh?Rc zR?0I|&B2WqwweV<`NC252{kG}E9@G4ls{ZbBm~%17MH8jI}z7=%oHRfqfto0>6h=(mmonAh37I2-+N{|VVr@};Wk z|I1C|TgJkj zTddumo}n4~xBlp8oX$`tak*r8&zVXIt7}jQpsC;yx7*a{2Nn#rBg%qsF9KRIrD&Q{ zH;~|IAk{tgP<&@t2#;!m93vp>U*_;|IZlQ?Kv(&vG(4SPDN~A#KwH@w>eo@?CI|C< zY`Hq2uWH8)0r1H3iVd$wa%bSeE=S}lMm7`6YcM!;Br#E)T937sazcZVpQs{k?PLg3 z(rf97t@3v9Gg=qptbx-^K2gUfk$c{omoHy>ZZgUDdkx{?sRl!rTghL&t; z?BCj}q4X>Ps~bkP{kG#(vfQ)p19z7~AH}Ue2)+u+$Ad)W&3KK3lGq)k^<zz#GnOTkTmPu~HmZy=`S5&y ziIcU~UzS_>$;f}jD(4S00B6e7TdRn4bnV||nv-1t*4a^Ao)@oTG@328h3?^tqe2*| zOyPRhQlVJh8R)*V^zQMe`rZjY<=?*O3#psg)@n0~JYPQZ))P^oNQx~@#sFS+ofMp8 zQt31fUnhs|m*%0h`$I~WGQYqvUEJc|EXTbFMrKv@;BI-k9ePV89vO5|QG-f;<^oq0 zt4w3Wa^kp+G^_`3GVPd^tD8REJ(sB#6a9*xne91HECA_s6~ic9S7woR=cmBzS+olK z%RR?u3AJ$TO+9|7n54!nR9$semNjUnmnFfHpJ`~+KKW_0p;;zs_JmxLe6mQ(*~vVr z?T-j;C=VBZR(zjpmMB^(`cmQp!o{i*TF=-~fPug$%ig#CwB#Gz#mNjo(LM5>+kHOwVn$Uw& zMbp@}27hI*pEF}EdMXLFR%HoM_~yU=4UXW8XrGHJrW6m8LyrvPU2#R%)tt4{#%m;! zGE?&f3Y$M--Z(T%oFlzVZjb6W{H>^$-Y(s*`=KZ~{IlN^QTj&dkj)7wK67fzh|qZJ zF6oIm(p2>uY;vVgb&_Y*WBXfk%8Bo817fuvAI|o~ujPgcH5Gdu?g+@nZIno89IK+! z8D0zd3anbnDLiqV@21FpC7Ek|w{D(gF4;88wOUL$?7yO(6whBc@8X`|vtpIC&ce@n zGmjnVrEYafL`im5Ws7Dtbh-v+2a#_+sq0mTB}Ohdd2DQiRtCSQ4;K^~H;np$WFqN< zT*cpuK*+61c^+G*Gtf+$-4yYL?6*yzQMEPFt)+__QQ`4e$XV@6bIY^$hj~>&ys`m< zxRuQ`@3efglLMy~1qQK<2KF$B&_9L5DbFDG7>2&FU#c^V$9e5|SGv8DR)741MkLZE zk-ZIBZ(sj3{VH=AsUgY`$}>9&BY!Y@3VeUoH)c89kZJzA9b`vt{@0Ye~TixElq^IX4I6U7Kii}BeE^XNxwfDA|NPx`+>G@zk~VY zjz!pcaj1bR3`aP=49jH%ZV5f@2~$;&@`9M@DNQ?QR6ZbNG1=(3V+7??J)Cd@ zeDWp5)5VJmd_kF8^L|Lm;@`;cw^V2d_uk?hBd4V~%vZ zo?T1YQUUsqH!pLo(`#TzhdkhhiS)KmBXXThc>a4b9HA5%7;wpp zi$B*@r=j=nt=%(o4R=URe?O#jvtuxZf&2H%4xjx|kIA@qDa(SCym%b45p5=>ypH3C zdTybMY&L3B&)BQ2sVpqc+}YDD=S`$*ZgHmL8$P}-xoeYs49(g4ms`B^Q%;z6Qs~&C zO8O0VrN;X94F+GOlloFMKyjYP0a>Tb6`E(^8PFlj zT8w6PPg0_FbJN5BH zpZ8-dd;2A-mKY3UCB==1dZ}_sDQu1=&d4XE_ti-+NJ(PB9;wIzAMnJS`4a1jBdBCdkmQ*SA=Tz+U&wR^U0?w}$>e zO?}NW-K)^6v847{m8@mGD5zJjw%deoxKUsPKA-Y?Kjr4YV$;tX{zKKL-=}%&JHsk+ zodQ2S847sajgJOyC(S#je?bj054|M~8i5O0ys2pP**IVdbjfqYixsvoz-;Cm4iCts zY>y&3;hLI2SawHX(Zsbr&{_y&JY4AAJ>uv_NqngA+R>L>U7p+?k~0F=N=g0&HJ7-4r>YZd=X&@)WXF{ zJ2EBBv1C^>U5m6^hYhjIuAj{hFe^!M&9gUh{0Utw1TCa$i57$^dqMIgF2s8kTP&IL z*d5%l2y&1YP6Stm@N=w}Yi#T?xdB}h{D*=$K6VcwqsHik8;v^7r>gHS`co>faXh)j z7~eVj+t&xCs`^l`c+VZU9&m2gF+e@PI@rCg8wd4glDz!n>EP?^R#I@&vTf}QnMPqt znj5e37$v~r=}yzjx-MMTR+5T2T-u&6&+&g7obz)6n?M9JsUcoR7nR_yrlje@Zd3u_ zKauvY@es_H<5X0wUgU6TPwFj#@0RDRm=r4ws>#uY9f<=CN9mo)$+%>`2Gw9H7d0Z4 z^^t7no=%huWB!lEvT=v;;RkPbP6?4XxRmX!b^i-hCF5FLsPk|w^ZPKrS?uqursrpg z1oFM}faV`|P;C-Qz&yh1b=#X$R(g#rQ{EX(IwL`%$UkNq!UZK&0=$Y#S#1~P2+LH@ zWC6Bx&DuA~>g}kOzMs*4an6FSrWo_b>G>3lyRtLin>yeq_g!H~rRSaQc) z1WuV@40TzTM;L>%6lvkVKt&OXKXc3!as=$%R>yxGCf2ayI~266|6DmW z>{Cb7l%-+L39P|qeCkq}pL%nh4{SoTo?KvWS!(tsU!*@}y){T4(???ZDk-8F;@^bz z!Fw`;AD?`)J_JjpIry$$eW$0e~H1UGxigqcwjOc+)oypP!f1_brx2CHHFbw`E^06F(p8|*y zmjg~K83(>+Cj`VVN20+Lc;%wAQ}*+Fmlr7+G%qEE5C{9st!a2=R>h>GRq0p1I4cfsGp zeJCrXV!iagcw?1e(-_(-8Q4lrzm4Xo+)DLbQ~f+n@U~J>2}E>ZXzbVeH?l}@BA6im z16z#QlF>C(KajPoECmmfmisk^*r~8;~=C_3OAd`cM)65&?(; zKNdv8VAts#6UDK|)RkPigvq+&GFh}+-`<}c%#3Y?ewS_2ItrvMh=8$U=tl4d+S4pW zJs;Kjst7wE1=7LZW~5}`prJj-yUfgxyPTVxafN)`)7(r;C=t~}{vm9fE)P9Td@4inNhSbe`2R}B+((CE-G8wjNQ*C-IM*jkxVwQcczs$z#kh`n7>!@LOgVaPvEd$`t=tDw#! zChumsIaD2P(eGNo4Vn1tq}7L(g}=s_Vg zb&(GY5Z4aK?hHj*f-d6%J`btZ7KPUz_6Ni{$i2D37Sfn6ICF8`&4~bWAs0Yo|T_9$+VfaoCuM zZ@$b*3)0t<}6gg!UGXVbg$cFYCfXO;)956ly398TDsMgtPVn z{?98@T49w%UXTN)ce#pM%RNKoytE~~vKumBPxGkwrH_kv45N<%9Pdm_uFD1Z>Ii*a zsS5PJelp*0)D%A5pAabz4#At(9@gT~Drb4z)IiZeUluzYibd;X!hUICcSVB(@fF{Y z=2!DrIpgE)e!ZXN!@DhZFc_LGnJHZuprITk?)aA5NLj9S0H;G=tBFWo_>0nFWCy%~ z=(@PFpcwRW%yqY$df2ohC7)mTBM#!q@4_GdwjyQsig^0dFC%;!7m2Coe*v5VwV9vueTp(d&NWhieqrX82Ce;k5@EWX=V^7!0mXXhqz>3uDF=gj0vEO#(s6#+rERETE zdtV%pnS^Ow4v7=*qD-j}t7LYcm;%*h^T@L&b(T_h{pe16P>CkynaS6$s6Dome?anr z505)wrK^Z-bf=Ub?+T}ytHlY6uRSAM)4^tVwv7_DZXlfY{Mr8;N8KTV1udJZ9H4$ETPRt+G=e3~0pUa3lmHzoeb zig^@}FVeHZ)r+xpJ0ABuBjvyIcF!6Km|6ImOR7FLf&E`q@vVRG)usbYj(EC<$T z?F}wS{EGHsL*&!`n(hYbnL%CMvmTGXAY^cb*HXh)kb&;t8|;(_bN&2IU4O@$Q?rT2 zC+{sfLNRnOE>ZvdD-!SX{vDNUm(a=DPxb^9$wDj?)UX;t<1|;v;FKtyN!_)P7ztUq zXIJ6?c${2gLU^GE$~~`jWThw=BZ|iPwO_Oiz=dZ56D^>TSiu`>?9G6V7LY>oP`%CBCq??&J>7~z%>0@5C!g3aD ziA-%c=Of8fYU?KgH$>{_1pU5IRve(n13FKgyUu`uxfYjj7gC#0kodyMdeF$=F|tyy zd)O`~2o`y$*pOS2t5J6S(Xx@d*=xpuJAWG|vZMZVYQXxWu9@@gC{`QLi$zjJH{tlg zmSZj|Q$L5sHFNIwvH6FGbDE1;c{DnVS72h8{Rc9q6Iqz4tMHyPhYtVHp+;ZoU7PxO zmpZ~^T$?byyir8J8joiX4I_HMeYu(7c2SQFM!prxiBYMLBkvCqa}dE=rdzd-OE-{JHlS%twMc?4-Xxg#@|i0gAR^@+Gy8DPtJfGwd4x8yWS$+F4{lU zg@(qh)#N-LLL~2iFj*tL8}|J`f>H^I&P-p8(R}q+jVOd?p^=$^!e7q{5M`8l5%|R5 z^i%OIx^159$IV=!>8#c_=P?k`_emHz^|LbUvKoAXH5RDd#F!ZAZ1em#)F*myeDw0B zV+R9rnW+k%9eltXQp1J<-)QAPb5;^x--GPGLRfH7FPy-st0Ux__}efNli~V_qjY*I zpR5_fOC+{t2Vm_`K^@pmJzuO6o*utA6d<;IC11~tS)qPxDKI5pq4g$zU7 z{1Q$J6`h^1F6JeC5(SHm8jln0hk4X*#I5)F6lwc?PBU}#nCPGvzWT6S@%&wyE%WFN zNBcv?bnUCkr2nF3dn#8`d2z~gQ&n~R3VER>FtJGFNWA_TRWDx{eMt``DsUe7@xHuw zk22a>TbUAdU)Op zJt%eE--u@rqiwgtDO1IH;d!0Y0Gkb>G+4OAo~u|JPeOg;;%U5aFgmoYp%E5aKjB%U z7L&d>>tVydJJn9VyxRj?u+OkibPqX9B?sA2J1p-o+~t4pQ1H<>H$DYU>;by@Y4L=G z#Y!5E8SQy-RA3uuTbXQRuejvQA*y5s9Mx#nzq696eo5@Y(_TWXNG(Z4G(?2Jl+|7H z`@!$fOfx6<-ZNMe0CM3+ebJ=qL-jo}a!K2+FZd+A-IZMsSh;kRQRsC4RZV!FT~v87 z_0~2e5{nkEA1(SgP9{q;og1lN^qB&`OM5L{fb!J&xTe}j6c$bc=KXde#!Eb9z{3lC zW;^6nI5@s&d#4wzX7gO47DFf|L?j$Yvn`o_rQ7st9CV3<7emgvOCFah*EU%Zj9p^A z3O&*`aQE`bFAO19ScPh2e7jvUX-Kk*KDX(yF`o~%Oe%ZQBIk*t?2nAqdp+F`&1W+Q zTGhukhWQOp9}dqD(qH*3O1GEhQN&?r{k56n(EKZ%y5F*b-#!Ddqdfe#huVw zX|4_?!wfkITbXggK9jyK8OMIn@#B^kxekq+GeBE@inQf4I=b*L)CVHlv6Q*;eoq+R zv*cR$XiQU|j6ncP<*sdNB!*K1&M1PDhv(|h4JpQbku^$o-{oMm<^;I}Rivp85^b6v z;sUt^qfRKeIYf(JisEad=7*}ljc9`ufVboVOYw$FlGD|sIC2I?f};}j%@ z0DrByzAKp<>y1j7F$R8?Lu%Im-VbA*W=}|4|8^u(`nEAv1|#?t!iZlmKE+@2$#Ayi z%prZLMH)7i={N&Kj4C>J;m zA|%%6yO1+#T;arPP;t==mYTjZHa>Hv!p)J-Y%mwLU)oMhndQm_d(sWBuwN=#8w&gI zg_Q0hpXfhF;_e4mwMT@DGpZ_S8QEUUhrm+#@0I?3ede-bvqC7WiqqyEeZh||QJJjF z5nz|iW#<~sV)V<|3&LLS~IQP6J9ph?NURuY*6>{vY}(hl*4U#Tc~ z7}6RW5^0JLY0pa@>MZz+U7e=sATI8Icm9!VexrI#{7Fx z1^^II77^&JZ8t~mDYKOgBc;On`zR{HRM7~+OslxQUj)9`pthig{=?)$&`16a%yTRE zunXjN z6X^daiV6yKTh^{#u7$D9c+jqLw`$+&wA33cn>0jga^Spv;lt9y9FAn{VA80X(9qDo zV}~nKC*MtXRjYm8k`=T8A|q}8%ywZDya;EPa=QpVt(n`kKwa3h9v)EqF8us}-TQfA z4}1i@zl46K&u@>t(v2SN{hRx+EjX9m-QLusZ*S&9qEwS;MWNZ#;+CS2o)==h>e&!{ zg;KVMj8iRWPyZ(A7n8yGMtL}o%{3CM=N(OgGM_I#X2cosReHy;ofkE4Di$wHlip>5 zx9p;B8+z$B9qd--0Ql@UA(!!F2m|1wih)E~=sqAGV_=$yh+LA(-XFbsfU#n~Ll~bq zQ4x@<7fXxjaF-B1hxXqvaL_r5WO7-v4eJ>+EQw7mMX|6mDZ$=yVz530Wye2>qeyWS z?fPxk3aoY&3+#~kxBL0@h^g((d}3-8f2@5i$lnNrXNnd*D_*jBAtK2`1tM@BmntM{ z3chQttq0I^y>`vr{ubqNtj=EaRVj^60FO_OBO~wnmrm!81EbYd`0x1zM?eEs$(HWE z-3+zaI7wNfl)ilo`6KO2r zvmA^u!(tn0_&NtQxT|z)=hO3ql~AieJK+B@b`C+JbkUYByKdQb-Lh@lwr$(CZQHhO z+qR9q-4Pw}2LIsY{7f<<5=*U+H8g zQ`KkKrR1fRTULj}sgvPuFfY&X>P7{wm##X7-oV{gS{n`mTW%x7dago!sDq+Tr%z(R zKY%l)%!SG95ZcBG3O=z%!WoaTK~mAEnN$KYD~k(mE@iN=ZF!B^h#~ASKdH|0657lx zPQ^Fmn~%t2eRl&r%wa$u6Ywlu*fjt1K)Vun1TrDsdxS-*Vk?_;(_Z10#MAPWcqzi& z(ekHM{ije8=X$(`N9vi-Ee6ouX|QG5kDUp2w*U&wKB84=?)awZJ7241{xFPragIMT zEcS~I#U%u$q{%{mZ*HagGsMIXnzDIaw5N?$>U%o0|4~bGyMT!*HmAihq(X8U{ivgi zz;}+SW=Y5LyuYhY&k|2U_$|IU$JT;ki=E!YM(&r@G)FBgP*0Fs%TECJr%4yFlriKE zM`oxtspVx1OOh}CEpsGr4P1?~ez&htkrnL>FJ}NaZsHe!kh7qjZshHJYmxj1_?~b^ z1B>etyku?7rkRk|6ebapRYUISnogBFvbhs&FfO##J{Gh9xB`$}Ng!Xgizr zXx={qJMs`=o#BRbp+o^u4lLd5RX|@bXbP)$Kx1Z99@R~l?_0%h~ z_!KJ^635+UidM1901!VhHZVqkd(o#1B7rT`xDBm@{lIuVi6z+9k({ZQ@E$JRWN5^O z(_uap;PC1(RC0(%7VFm-HedE~v2Dc6y)VT&4YG+}Px(1*ay#rZ@MlaCCL=fY-&RwT z;|d2SuInD&R6hChSdxM^=al@cZvN%QSygK3fU2OviS$$@g#5jeJ6{^>&O%n7W_?BJ zJQs9rLDEkglUdG}n25SCEp_AwO49Xu*R)+!x5dpNxOCDr@Ij>!N~{ftR#;_v{7fsW z;1RTC*o9O4a|SU*v&UO~@6r6Q)6Q9(nV4`aG*n~F8ekPQaw<)f4@aQD?`_W}sO`q= zB&ep^DPm>=wDol(4L;)u36_hwN3$6wTdi)7PaO{AfLqUhmVEuE62-tpPkBRn9|)ET zOG*|a!^ijfrlMt95YD5bRhQSi4b^M*BSQrK{+M#=G>ZU~Wdetr+OhT_CkqqjqX|s# zN{cjnX+APQknG(q0*F#Tr0gj2*UMc%gGI)@&~34{qsBx{E{%#8X)|h?@1bA(t)Ia0RilHS(S2K5&mPF+aiG zFGv66!^W^jM5U_bO@1Dmp7W}c60Co8R&H+|0k-CDMajKEvcSJp^_ewd*vC5X2WUhd%orYH0sEKTw?&t zJB1*$R&EFl+DOn<-=;9efg$KOClP`K%*XQEw^8adx?^hXMiTqU(~VfYR!5CZ5ClA}mdT zLsM0J3t+DVZ)2=6erDcc-0C_rZNB-`-k4zjCzCH%#URdu*nu~wh7<{G8oWD4$A`- zK~&?n2Q@fO<;08r=He*^-8F*e^VO3+2uXu%_nhpebs>pd_r?6h>D~w+#{<^d`?%{C z7e*~dNO!9%241l!A5|nZ=xC&(T&+FEP1yPB7&3@z$xV3eImTa^q2e&gf8zqTN=~1= zTRa0Hgt+t{a5w5n5 z+I&reoL0tz8Gs5z^Z876GOJrAi$+MuB4Er=%X-EDtYpA`%I~jOm_2R!~UqN>g#Qv$17A|<|BLFHC}86u#W!6bx`_LZl;q-1;lYeOMtkK z{s)%%Cze{CY5l$Ow37fF^GhZJd7r#Djmf%9($-thnym~2m=z1L9v=Px+MCg8fY<8} z8vPIOBf@AJ^}_0=tsfX@;$%@`Hk68S+Utq}_(~N_GJrX)o>6TWz*me13)&qWkZm9e z0>~q7P+T4Uzg^L3g~r&?4od0oQ@4YPe~Hz<(6{H>k~xDkSwEYlQwc>%E8KAh4GrN> zr0E};4ul^&!AK(-aS3~;riFy?78ImW!rWd$r2El+fbb_Zr8eV|y`5)TuO-=xrh}d# zLMZ4P-!xhhRt6%h|9qyoUmg+G;N-p0b-&+@F2HOD{%4ev z;Xk6B^vsO^Bg)Cj#KQJpTRGX7SlRzykP{z@R>a)O$=Cs(R>Vr*$ymtP(ALNpiiZcv z(aFJB-x|toBf1q-ZP6BuRc18K1_2#^p)P)50SIv+Z)gn+MxRJToCpy}At3=MAPApu zd*ScDO`U(WX@4%>xo3ZUwQoJIJN_xqS+ne~?62SKuPiR8*4jMm=o5%FQ33_;eP8&H zc>y6cH5BL|ApSvb{P_F;oSnEp*5JRRfO@Qcoa{t$V&T5>$XR>vPu0>00X@bRd2xKq zXq@~3rXRn~K@(BIz> zM?nsN{RamIUA{rU$5;C@5ab|`OMZFQdoQh&0t7C6+Q`U&qMl!>P%?k9m^SzY`1+=& zqwx%Gr(zu%QuYr(I|$}j_;A`7x5iQa0RPxvmO<8s{%&LO`r(wB2HO2B7DhG*bn<8I z^=Ss;06~dz?2feI>)Vm-T|e+?FO%_6gR?!zJ|yx&cJ=kTfJ2;s|0dqlp6!OikMRZ& z$dOO%00unq;aB^sKyb3jNxnn!Zs1Hq2jT1YhQo83E?IL8p#;r*qvREctU)6_t3_X zvlgB5&O!MHsejvmoE+fi#R{=?^eLnK5^iSz{MM@v&hsI_LpN!^;Jm>&Rr1lnKYc#WCZ1Q1>5&&@kNTeZW;OWLXJiDl;Lh%H z{~ji%inarDzYh)jc?A&S4tDAQt(z2nvMf`|L%wc76envVY>Jp7hE{mXIQ8vO1iBxzq={ovdE z48Q%tVCI;t|*2jd_ z34zztXjPZVv=s)khhr2w_NBW+taDNmBGDq9PL4R?YB`EvCVf;@yd0{@cEzO3#jyN` zH`mHFpmI(_+Qy~E^v6g-R}vZ1>kw=Us?(fu3XaDlVec8+0@@Xk?!PG+PI^wtL^-vB z7kH=*C2_jh)mbXOm5wF&y|NvQ>UJAWAdynsWlIrxgq9`kgU=y7=dvSRYTvwE;N1*q zMT4&9;f0~~=G(#_7#)j45_jD8uCipJa6=7riMajRdCR@*{-TiHGiaW?KTl@i5Uprc zBpx4Z)Ozl*0{AN)z9^iE8VR@ED_65odT%9_b+TH0;qbP(89ZQK7aL{|lSH&xu9?23 zN#gb+6RqpPt*Fo&DVjGhD((WqP-P#lE#?y*Yh%Az93iq(OVyss z1+()~s5cx-v>J~Wn~r_>Se~K0XfRtCW_{Yc4k`XigJn2}R157I(=~ZTR^6tjN#L@9 zS^7%p`S?v;E;1lEe^^l4Vk?OUOzJ>69;v=A^5L8GB{UUl)ZOj0$e1aDB7$tfOx&l2PYBem7G*R0RbgbiQ@~} zZ$v5u9Og^OW!4jF&yM@+6Pnc*Y)7ZWKoVWv0}bR~q}$7>kw zT+kwWw-+V*5r8Kr&sAC5!;|8YHc*-tK!riv%)4s7@ z9H`VlNCT34FhzzxJxuavzyCEtVX+oQ>IG)bm%>2lA*CMSNEjWet zZ8OnjPsH8x6Af;$&m_9Fv#)*yRao4(I1mY62>ixr72u95Fvd|E)iGBPDxmBtamM|HdbizP^=mlA2rPAY%3m^YKJg$<3|T<`?i}-zQV~u+*I>@bYc}KuJV@G+ zDjUX2qU>sW27nep5Kn?T&1KS&oWzn|CGQx7RaBzEu0-FwS`NS%vjKq@ch_wGxWc%U z21_XaSmUCZo$^Ba>gjO`uG!=%qVHk^#*(__`sib^Es&p79Z)+(#-t1El=4tx?X4~= zE3i(!5SCmd;BXZ6ENL)qou=Z&_!8ARq*zn9(sNs z`eYrWhZzvQ(?q*ddvf=o#;AnH!96vlHYq|?EytV%8~L2w6`4~AfhQ}iyz%I}$WMAe zR=KH@;~D>zf}TAGQM5spt|8gXOk*WxX|)pt2C&3oUN2~_zv6HtiAK4>icnFDmKtOp z#C;MnnBizwx;G6w@6FzL@h+CJ&y0m4C=463O-3rX-4p3#qB@Eq;Sij)zJ0qEnD0+9 z!4F6Pr*tS~7RgmpM~)k7v_E>r!!_4YJ{QD;iacp{S83E6Y5L<-({SZ;+4IIMyPq+i zs`gb{2#0sv&|`NEfx;0?7W*Z|o5wWu6XZILaQ>LzHz;>9M`mz&5UOPc<#y2jRzdjA z7T*w#m|BVXuea&C)7mja%C+f95o>8|!CirLv-QJ@uy3!GBzS7f|BP9tE3PY#6MaX* zTLLd3hj9!#9|zMR6T9+*Y4v>&dMHSzrF$gIE)&kZ>HAwmEM_Lr=kc8mc-OrOZ@~3g zt+`+Dt2uMYW^3V4Lxj-r$_Goy0iIO&AXCp~JEFeWGP=1{6t;FEmCUjB4C~fjNq^M$ zuYlGO1DFvTXE+D&it%Dz&77k(Xu1f5Qn^KxnAVm$;sP6 zjdbK5g9bj(Z`KoUPk)^a@W4ugRNS+i_7ic2wNUvMN8kcly`6%byMR9|`?wD1^eCD!gr z>47T{)WRU#>t_u{$pO;Hf zNTGMxdNgpxxoJIlGCI}ZfYw=nMFm!0gIZC~LdupoE?k z%Iv6apA_=-uy{s*u1#WX4*b#}vK2au?;ZL|LnC|cjqUa}9UXJDF!5d`;%y`uuyPdY#Ab^!_DIE<5$#58?-o9qD7xF|&KTbh{ zJ8rHFt41QmD>>A830CG+Tvesiy3gyed_7OFS@alw<~TJTmA6S6)7n=280j}W0ia3@ z!K!2G9XnZq*w1LI%Xgb?03>x97!OvZli#Kq+r>|h`f8Yg%ac1552NIYkJyIe?l&QHjIrbSM&_! zi#3!1*K23qIpQYK0FM?kM>~eqW|qReYh7pA*0quBsJSDK!VP=kF6(g#u&#P+6;9g~wMi}bC@m|V-c z6nLbl*-DmIU{DV*yW518Jk*P-`ePQ3+rVdrg1oezd+4!agF^+Ju@r;_KU&Effv2=ar6`)nTyj3BccCX~_9s=}P zDf75kX$od^BjJg*uGwd{89ShF1i#3mfk^{0kd^aQP%n8O+>fn2}*X zYgo6Xppycc?-Xb!+1A-T)@Vam9Z0P)3`l%}^QfnVY~)~p_r`hX-#_v6GyAkhg9|Ev zHFKteM4tv5=ZeD^9>WX%(!_t&QrtN>ICwYPlNaROja%+4EsX}^Va%VCz7~IH;KlTqT8Qi z9uxa$Tv{V9lY{W`eGmkTprz5axgKB+%wG-AA=HC=*`2)3$$CwJi_GJA9xNi&NyT_M zr@CF9_8&<%M+_@2fx%LvWqyy!SFN4j+^P;|G`v83nU68eNI%sQXuHj{%1mZre@e`O zzLRlAq~+xC_!DxyAJbT=@zPU0*O9w4R)!l>U4;Q2X6B5HprtU1VWl5sk*$rfdi9%) zxTmx~Fy9vlt_s)Zq?E4r?n@xBV@26(@cVm@ElJmCb+Y9jw`DbqpXlGSFWWOg2tyE( zZ}vIK#$kXYhB!X|hBpvwRSZazF)quHS?Ckd*q`o3z_d?&GJA7(A(kwf19Lkj!+`@G zvNM>coW?Y-H>Jn;bltGyz4Ki6^23vcEIN_YQZ~E}7N&EFmTQKj7#gWza98?V{8}$1 zInEUwIB~@@HT(CAJZ^PN#3pA&3kGg9eamb&w_IK%qF*RGOkXEM8;Kp%k~E4ypYs)W zV58^4Y~?^K;s>|pJd>(wt0w-X5ip|>;f$~1^X5>{qFhF8dIPTG%Teab<=QUQ9xx2>AuXgC4 ziX=eWb-fYazTmmb@h`l5*6x#Wr*CG`B=IM`xUcODTKs|$I$Z8uYG{Mv*8Q_(jK+#c z0%0c;mcOA~)A;?hl}z?!UACquF`@;!bCxNeaC6H$Q2hW4>s}r}~+F2IZe!th~C;y3UYnlfj804?vi{1oZ+#peoMW?k1`sC21-% z@_EK2Lr$(26L=iK$PlNo`--?)t=IkrupPQL&A4SYjoB3mHyVnB){e6j6UT;Fy72R5 z5=7RCo8d=9B34a0T3P=XS-SkqXpys9Jl~>xkq9fQBlq^>{;jSC1lE~??n9d!fRFpW zN=yvcW) zn{ztMW~IEyXch}}(j4h!dvLZiVN1H#YscN*ZLm~Ru%j48&JGOnd96h2TheYgLTGcXylXC@*>3;7 zfH7i0(x99sYUJ<&UqtfPQ0lum$@ogbD^||8>>phoyHf8sx(l&3+>eqKPTU@?GEjAc%#oPgu6)zt5HH2?)H#JI<8?4ffp{QkiX*!D;`+%?$hwAQf~-|{jd z?s6h`3OpBAq+G)_RjOYvx12Xt9dDXHf5K@5)w>zTsYxAX9g>m*f`xzBJ?k&$2k3P( zt$`#Jwrg!?b8NC6XDxdht_%^#>IwlZB>5`~bmUs}Z2?`{@uE;@a|Mt@-XKi7&bl@u z_K-Z))!oHv$&sF87QX~zP5aUpFxwGN&YgS7(BNPMaM|5$ZhJEjc+@kc5o%Ugzo*10 z(!U^_hk7~TMq&Ec)@vK165fxudN<6v2=A$7R67t#G}%YVxFs3~>e# z(BvNGZEkDNW5%X0uDos5o`&wmkD_O}Ib*2N)t9M5j=#WCO%u_pM$u8yN!Ax+HoMe0 z&4zKmnN?A=MRIzksPKB%DQtKA(ipkOykA^Il*idJMU~w|YG$f=5Z*19S)bsxA)Stj zCNP!6{-cPcLQ#gm7|4=*l0iNRqB?G;4H}k7bwE5L{9Ms(j!fyZbjp}*^7Kfd8RqBn zqkgywwK;RDmu>sQqz(oNMvH^n^`jBIYe-f9QcA^`fo>qTU@xb-OG36V(owSmbgvE6e1Af{FxI7~%bFWV#V0=O4#U}Jx|Euvrh}%wtS_z} zKpiO^Dlw+Q5{VloWrbH3Mqt>@i0y|{Xaz3%%HB?9#!};YM_&Wd7jbWnQ-EU>D0QkM?a-JM0#IkC>C9kuG zG~Qif>prORX; zJxH}K`*vy9{k$^nYYE`le$$GyfCRGr$J?M*ng(Q2pY~(@a7qPpYwWYNHq`?E&#_x$a(+s*B#s1MeqV|A6oOF!gl z;T{A@t0(4`nx`so$z_C)bmu!6a2F@pOsoPEYI7G|Uo&~mpn>K3us^iJ)Jz;7!emkVjDUQbh#70sc}4JxS)+)+@IZ)&N$N)!!r@xciS z=AH1V(G4`q5+%j=L)qpP}r#nwXG*$!_PC zKy5XAK~rH8z@pPco*5=3od@*K$O3y|O()>3W*DmFARWevUBtmhn#J+ei6{r#>o|6L8xaJodb}22x~KhIzDms4s}qOGjIm+ zGHqouvc=A|J|v9mF$G0sl3PaBExg3r^}yUsUy<4$sj+cpGb+eR0GCKF zNRF~HWSQ*ES4T9tOEb?(!so-LZ^lr*xB7*H*{-=7mO66ClBN_Sdj(%86?H|*JA(Jd z{W-FC3qxiS@PGP}sw)uQeF%-`93|-qvvhFOAzb^IezeHHY|~uj7{h(^Vk@bNk#W1f zE*icLEVhvo4>XBIIBjG%CsPTmlxlC~Jz@#R3)9eg-RGEdthqRbfn5BXRbA?M08xuX zCO7T1n28x$ufDvd8*r^kDqC4|t@a406FRX>Zsslx$!c8vpokAWY1gI!_@XeqLh{T+ zBFdJ zW4GELuuk$21IU?AeMSqAG3wlrUhB@rTxw)RevZ7vKJ-z`e7bDqLBY?S7?jp7ou8(O+$7n+O% zpuszj)+3&NEqZH}$(hljg+CAtQ#Dh{x5+Vc*buhtCa>B5n9#hLyKTWCXI)sC)Q!;ec-KYi2x1CRs z!Xp~y9etg#n90<`-W`2sw!9tHOP6qyJt``|Bd&M{&ZaIssP)84M2Fr@9GBZwrX@hq zkHczhKY#*4*hQXnU|RhcuoFMd(fL z+Ey^p+hTk3Glfh)5?k=`qMlX8oK016I})K|$ldUA6x-y3S+7K%^e3<{uV*=*H!A1Z zN=Y;S?tI9)3=WY`ZZI_XPuj73D`$XL+-!uJWwlw41pO+Ojv5v)!$YA_gWw2`cVg#P+{G!#U< zITNZoKZ+PWxy%LbTL)c&4{?S{q9zswrk@&`yWjkg2DW~!8rA=xWMX!)?M_ZEatE{P zX_&sMj%?@I7>L9_VoOPzwpc@29krHu=J92sVD)f#wFsrpoMSyn80Ny7k&Da*HIS$g zDb%{f9_u1Lb)LM9HuLL)iN;>PoLFeRSg%EPnLCV)eCg))AD|jN$gi!R^KQZ}k2Td& zIikWt@}hP?h+?betp3R0u4H)`>G%@7NYtr`aur=)9$*pA9gGQ#0bU~n{|pYLFh-<4 zmOW^${p&Gw#qyWpxWEe)ZiLZI0wL6kxo?jz9|tWakI?ue8||Hqg~du->CHG1V!g)m{e3bFs(gAS zZHr%{x2hs1Wvgm_-~T6ZpQ_(u&SGQlTy5KH-VHA1d`E#@Fnr}BcI%yDn%`-U)yW@v z2H8DYtQ{LA)~>f$s4;F!(QgG5TJu$UvfWI z=ca`CJRL>uBJasjRAkBNMraeu%_1!J3TAbya>?i4Y7)QB5n5u!7g+wg<45QP#L*1E zd>d_gL{M=Wl)a3m^q2Sfnz5bJp6>(1xSuW$9O zX5-4#E!XGz=au(MDcXGT2Z+rmj2yKmtF%upqxO5O@f95TM~- z(gAJ~011~JcyK=!JU-w*z(jZIDEl`)Iq+nr#1^@|c!1dWGJbw-ZRE4Iu6|uuYe+y1 zfq+fdaWi_XOELJI$Ga%32?xB&1V7BKVx zMEtnB`~Udqk^nnhZT0y|91fa-qO%La`(nWC$B5x^%F+RV@)6+E!T3Ae2eA8b1D0(A zhFoX>XuHx~(Kf8;g5dru=L3YegZ!f0!n@V=$FJL+alwb*n%@3%0`AWah)p0z$EPYB z33ncO1i03Z?SpWg2f;S6JG1!*sJT%T!Kc&)TrPeUd@Y~iOA!y~2-04Z@C_dRtQPa# zH<%x%kztA-;pPM^gaF~K_dzkhEr7qw@%8X`QA-tl3mo-AmqZB5%S+0Qu3j?_1?e{%`czAdcg1xe(&xd;R{Qh(S2=wm9 z{~Bgz6JyvqmUjD8j^?U{yL~}_+3+xR3UK#LqD!#;G4^Xjl}Wj13Js_hT>g%C>JDxQ zD{tr1s5z{(-xb|vC#W>Ha2I1b{*eww+WE@2HQkoc0|RG^UJNqxcp^PN74r5l(3F&t zd@)*Vzbq}_7T~PqMcHv8bfFr81F-QsfJQ7~(l~N_-z!AqRDiNES zHxtOK{|li@o>ELor-;@rTvu(d7E$w)_7~ku5*zu!!frtxroHmht!cjU4-FSt_GY7p zglS{4^;2~2osXkJ6Qis&Mm0fte01DG4w@XN}{ziYJ(kf`@rc@J~KH z>ZyHN+;i#pr)tY=BO)kBwL)>eK_H&)->@@&j4e@YX%WL#dGLTb5o+yqjUZMX6BYG-o56r)x5na%kNyGUj~+RQ?rOu*Ybz)95CbIR>Y@DUzHC-gE*2LRW5@Lf`Lv z1*4~8C$mPUiZ!IY!{YHoPKl4ud*bFy*JsZjeRZ-m&zw8x0}aa)XAQQ^l(RZZd^}P< zOgO|ESCpwzK^dV_l}BVBOz_RPR34wC)3-0tt<~(ukXd(=2WNTIxwE92^F8TI)xswn zRA7523|lfdPtG+(SFdHv9$mehxJ|f92^fY@G=56V!(dGmRWR~`Xln4Qrj6N5du~q= z9IV-11PC=937#z|`_>)nx%aD|!Yx65NIsFNo;xKivqp(e$V@i?QvM|II>dcddIo{c z@esLwc67XqMnj?>R3(*1VB>y&lF7ys^o5SwiW@StZYRp4>Sm`e%)p;K$*2N3lzO}! z4}nR%_h~2Lo%iv(VujuDq zSUt@dB84RQfkw0ePff!gma;D+8VUS&evYdxSuBe znKTI#muR1H^rwVFH@TQ2OlpGMcFQjYGJLzoOVw|D&V1`+1#%IK)ATf26B25feI^F+ zX{DZ~QVYR`nDfB#iz8Wq;gx+)ebT#*Cz9KhtwG}ToDO7>@uVz`^LS&7oIC&Ngoqi@ zDU@AI#m2G{n3%dQSY$=C2s+27POAHFx8=6WU`Ji^vX?LSZL-`xNAA%v}IjR zGoaC)Ni#|lbQX~KK&&ee$tF=Qh#@s|A&Nz?tXIR?TSNfNzMdk91~r`62QMKh{Ryn<2V|4(Vo7q`wVCV=Hj*Q zr)-@IM@;UXr!3hi|AoLEsG~%d0=c6;7ICJ_E<h0p>s_l$i)(AP}~Mn z7@}G1D;W+g$u`n+WwcY`HSY~$@4>)9g`{C&#*e3q?0E|(1K_vY{{pW^cMgW6uw0t* z%zz~!T_gn;c)OSgdr|Ikj)UekPt{%`D}>lst7dquVdBADHc(DBaO@^$9~1ELax{yc z2qrRSi3=hAdlOxrRuXlvFCv#iNHBma=pLd{A2+FP+mKDE)H#Hy*V_rg&Zy>{+Q6DS z&@cxzAU;L*Nw5~;J~s(W5`vGJenw~)ME+Ug;YfjYl@rNUp1#V$>Lx35e0LJ@aEmt9 z8);*Y@r1zL+9|Tq)QGJ(x9p)D2T6ETSE%fDsxLOK^A9adh+RlRho#rxbw1(H5n5LT z(b{Sygmzf&8rJsGi>i6T#4PtOUia)~M^*YjKDG$m45XTp)o0$7ClBxHhBT%ls@Snw zH}52I?Yb7fYMSyoFF0NfSl9DwSeiQR9N75jkT0;*pYAh4*GIw_3w2Iqaclf8#Vb)j ziCIKbTvz71#g#GUf$y6{$)M%h!Fe4`+^ZeMI$6wtL@{uUNGk!*Rm6Nw@0Xc^t#>R< zYxW1+W_gw*^F*D4VecV4|{NB-mYcwHFdJdV6F^u4@D3FBYJj7fh44=l-BF#;R6qps~VwN7WzRQfWCt@F=6pjF%?}PCWjMjYgqO0FKOB-RcOFv(e z&e4%SiyGai`~KAP60YcAxDSZFn&1?8?W`knYUn<;Jc)Q(u~kFS6`rj!-E&mE$qNhH z{y{D)F_qg#ngtlaZ-gVw&}X?9!j8+mAc2zykvNf@^IlrKLOZ5y3P^j%!_?8CbiBD& z-`EpCMY?Yo3cB-_gwW@NM3FDNn+RBEa90!w_HEAhj1wNX3!8ceEN_3kvo{Kjmc;GT zIPR(L9|ty9syGjR)T}o}uj(mnJpD7;S#=>imK*aWG;*J*>4F4ku%6xY?;c+k|G1QkKgKXy(cR_) z{G!NP<(P?4r8e9JI)#qW2H&+c0Z`g7{YzLer{eqCZg|fmu#};BA#~$ z@Eq%{1vJyAEx$=2wCSc(J~tzO*h2KNv4s#j>hN;a)wsa6pVlmAXmih?q8?)BB51Ke zm>!|DC@Dk?wNwHqq3q1{`FtxJmRFxHqj2Y?@4;P+OFlfSe)bt(nRl9~(ohzVpCAa9 zzx}+kYv1ThafMzrNqNbO;1oUbzId3%x4SihD+``1uPs7eO=Y(+LhaMYuWSg;nL-NP z&{dhQ^V5e`XK>Q{U#K8!{;f&$5PhmYMeaTjw{j7uN!WSn7M=0}@R?aB{^oy}WIxptsv|ac{OpwXWNn3d@hTNtXOpKx z`$9t~`6US{s5Q6Z!hpuZ-J00>g_MJtV{^`z3dOIlFq|(pe^uKEBA&Zgfwh2kCKmAi z@}?|dZXT*3;swE4`nqTsE#}s(C4DWTF;+c2 z-t*;DCpR9#Gpv&e6gd8F_)juD4p5l@K{Nj{RcY{x*hT~7QCnsi8W2borWloB)OLo` zB{#aUF~*xnRf(&1b?ZuJ!yqux^6cbzt^*_sA!wk}e^A?N&N=*kbxStoat!%)Cp^u( zR&%1|hL)s4Qtjxr=0$8`UHWm8ao$0>@+_Zl$P~rWY2xiiOWI}dab+qlPqJ_?P&B4u z1XWVZOh%{h?ycC255M?Bv??abj>qyF1LvaK z5`(eC)uw!pcF^HaPJ(bz^TZrUxOux0&EQtM+ytq<=&Q!TsSDy-!R{qeg7f1&0-UFi z$oV4jqaZK9RxCsNc)6O8y}YS5ED#G8nrAzslzITuOd!|L&~#+BA=yEFbRLehK{xPd zE{yd?w~-kZRH8ci6|F?qg+Xc_dpU0VhBn2q)Gw?ehe_g?_r=haQ%KAh^ENoFlX2at zAoZ-(_pM`Crz){ph2StlBL9P} z14d3J4}r)+0fR}pvKKrR?^1>$j)-=TT5!LIK(8K z$ce-LN$_+)xSfqqq5I9C{;O!hRPycd7qs_tJv*c^)k$O=H=9DyAdQ9B^jJKxLl6Au zm71WS5Gm;yoV~WE&QX5HEsdML1DI3z-v*hHj+}?X zi4@2VdB>9&DYl$eCA{JqTV$+Z_(GuM923;F+9tlh5)1j(^ zuD+ji!@)FRjXrhG$@vHF&a(ZQ78gn%L2b7DQ9o8q!{@u=gN>HBKN^K8panCdVzZR^ z@rd&~9P*CEsh?4qufodeJ@<`I8p*XIsvc9;8HWf6TPW9yC)s-P4(fWKq8FevL;fi& zl9f6O<0ztCnNfpU*{lSp7M~xN^+nfI!!u;>;#$n%AFH&h)5~Yqpb1zk8%too8Que6 zuvOEg4Q1hOce)K_NjNtgCxO3(1baWJ1;U>!KBm3RjAO$?Y9}cWp zTso^IJSC}5&33Yi4?No%=D6|9i%h(UtBTrLhpbT=IPtWQUh%ywPI#`I2(Dw*encwP z&faiw^lFV^6)ZyW^FmCnN}3=E6Nb;zb}4<6FlXcXuw{D8;IAJIk9Vn(y?d|IF;|av z8Xg^eR3031tkXo-vHTFDm>?MTVCGHzVfkQxZ7BJXVvEagcPlZF_`pAcHn4prpF*qA zZ|2dRVY+anF6bOUd!l-Ue9$9SOM5EnGcqiyis?*fDl2cexMuD)lgg$iWV(FTTKC(X zd9l-Fh>_Q+D!6N|C|wMpcfkw4BbW3t@}SbxllBr+g}FIgLRo&O2Cd(E@*eoIu(H0r zX8walVI;nGg6VfRDFk>mDc`c(rrgW(QFi`a+5sKTByS_+RbP8hA#(>q#aT|uxW}PD z1IM%fV+6N-Zi!Y#sEhAGi7_PR_3#w$atA$!9XbTW)}!)rU_M0JE_@;gHcehCHr4R6 zJ&@CYW8l!f_Kz7w?xX7524%eTGs&y&F_{|;aLp{$kw9P{pBLgcwUV{@7#e!FIg!|K zxiarU;oIt;(B5hQ5gZtnx01VeY((Ww7f)Mc&*_+m39^D?FeU)poKthfX5u>{EITt% zf2tQyRU#c)e(JQ8=T`^+2vcYFT+1~4FqptLh`{}On85nTA!(pt2cAkY#1#)OUIfE` z0<4iiYpy8f(x?OuWp86Vzk!rZZM7v8s#fpkQ@N3srGBP~mO7xF-$6&Kh6N_MnDGHH|6`r=e;7NbCQTS%NjIl$+qP{?+qOMz z+qP}n?ta_0jcMD~&R(2z^+oK~kEp1~r!q5!p8d7#%FBBMHnq*VwLqx*FY5cJkJ#ph z%N|8XBg}S?$j2fZoExSDd`=r^Ff)=Obv%7L;WX^%uy5VK|tbHAAGPI18=UD~>Wx`4(9f%Fuv;wu7zO^Uc80 zzs#|gLZ-4niQ`qhBThsnCdR{mtb3(BL>=r1og}}?9u9)JKD+ygq$9CvFi&_NIh~jz zxo5!J>&t0|H)anZs{1*uB;)4XseML4XOWg6cZ-Nybg0l|7p7~*z^fZbP7=H5(20{? z@(Mfds^z$F?lZOGhfxfpt+&kWDm!pf>9@6>=huA|%^~R0!p%As(DW8JpsG6z7cNOJ^(YGOzfpb|xWbnkzOUc+N?m;yz$`^=nSq%>&Z6>R@xJAE zMPC$9wbYv)F(UDv!tE`|re#4#TBEd#lH8Kt`wDuByc20jI6|_3-#mAs#N-RrWZO<3 zIeOCqcWu|7f?C*gQyZ8R5=dB>9GE@c!6AV-KD<|d-s0KrL{fv9v)YZjB<3&6A~v%_ zmF!Gr#d3Bi?;^o#;>tesuEvd$W&Z6+`w~PzFa%xhy=h!eo{Di_JA|_}H~pMjTWXEk zeIV<9^W(Ew?(y^iY4329`xO**$&lsL??5H5f`{<@>l#LW?xp@mi@t-i*@t+a6rGYgk5CY z?m6L}SM6oYx4Fx_qKaK83Aa@TA^qw~x?l;`;>MnJ;r3pcfW~JG>4YB8)xWoV{&&;y z_#+Tb?-grek942rx_1~`G-8;F2kyFOBQ>!Oi@@!&=y7*0J8ub7c>G@HodF1HiS?Uv zXUT%JN}e6R={~{wU0|UjjR2+BsmDXIqC0M|35p#ln>=NuG%(3&=KyXV2rko`HaWeN zNe?yKDisSkJku|2N@lCXZsVO<=H>W8<*x|6?hiqYcm6R8hJsWG*XGm4{lEa2$LD_U zV*sUQGK)vA;TS~gh_dnD&pFZUxOv3}F-vhrogHyD^-Iwe>aHUaH z-HbHII{o`tw~Y-*q+~HCE%&Hw2cCwzcdVBV-WOV$T>WtV9Gm#f0M1l|-1aL)6UECrqhGb4IC$63`Es5=kWg9^d!BodW& zqvNxX97Vle7?mcnYY3h5m-62>a7h}*Chu-37fXk&2Q!v*C2*??L@|g&yqLy7;Nwu; zq5YV!b=|XJz@tJh!XOyUEA!4QrbQm`(#Ntr4X)vDC{^s5I&aN<4>ZQ2$<(`jti{4m z7SEmwY|l=@RInT#s1ziYq#84d*jwMeIy8Rq{+fX7ZhOjjdrNok+V!>uAnV7daF{KJ zb)k61YV*erlvu3GT<7Y8<=KqIf%})>OSc`4UyX69yS@>r!GNM-F?Enu=czI(CBqrq zH~lK*m{ePYZ9nm|Y=)M(oB>C6^7!Y$DMYJ(oS;;^cO-7;~;UxuaPl9((uc_#~FEus;A!MA&3eJ4bWpbp1fUww?K6YgLXq^;2O24j!g!PR(tS z-<Azd)r}U=Kd-W7bd_O4E7SvOl_Gqa)wXTIsKZLcWyl!;9RWmU>z6&jm zm6qR(SG{OOk>QBxOGi5G(^KP2fv=UZ$KCQ+52Cm?*t0H{^n7WOzQISjo%xs3YKG_ojzw2gf`*yXl15tET68Yu|{46-gt$vX)$3@!Glb{T}6#e0<07mNO8*%K+f|OA!+@k(XOte zgt)o)Z#O@`pbkUsfW=HqioyIsKvT96F-c(~LC!@S`;S1;92KaK(X6N6aYC-zC4g1KiO~!V5IkX&VGe{ zd<-C}6^hw|TJ&>a^Gd2v32;x&_bfVfrZ| z0oW7bf|R}e0#}BHn8iHsFayN8eyx1XD->pi=&(q-4XU{*VZS0}#ig zpDaBUbv%F56b~t)ZwTjh@vh+iy%+^RigFX)GWZLipN9bbWy}p1{Q3Fw`T|Wz3=&LY z$eGVKfD{4pnS_Txg6ms%H#kb@qRVhJ9{Fa-|Ft!KToN?>$l}Mt*#+5EVDc% zyyrIh(@;^K@8kb1Y-Erh9~}&)AS$W_LPc7>i&oL%@3n^|LpvI za_VF9+b_MqRziJO0N#DU^Y1Ol-0uTZ|93lem?69QbCNv?`L>@{tAl)ZBFZA%I}>zd zB#3}vzXOTtUkebx9HM^>y zv*TlL7q>$Yh2HWurgO$5pCfA5>QM7q57TQ;dP8&q=iMkbmM|UQQ=YW?Qbacy9ehT6 z8Jmh^2*w1MxMx~r!Q~;15TU@UWFBC}d1DYlW!RaSe>i$}E)KUoxbRew(iB=?T7EgN zIYK0QVV&V0pRyW2wX2dot4b>+tzqSLh&lKX2fDh+iI`yP*Zs|p=1L>5;oVxcm@^(Bt1e)?pcw@Z5fR&Sg8Dsg?J^QqA;e&du%$!BFCKaY3jmDUY7ZvmQ#j?z08a%Ol=Vsd*H_+^3iW?E z00}b{RY-BIOunkS9K7_~Xy~ESV+kB`_|V>-=<;{ZwHS{&s5$}GuXQZ zqwuEZg)0_%XbagqoB)Vm27L4@jA#Gf0lxag_buGnJC2g|j&*iV!Ko0t6i`l5$X9Cd zNqQLM)ri|TUJq$2i+Icb^z`qp>K2HqsTM{3s1+f*sdw=3Fa@z2Vy;F96{vp!`OXo+ z=erfsgt=Me<{ssL9*`*Tgt6{$@B5l42V{s}Os-92cL;1>(uy5RB?%2}ZCvlE?x1%K zU0#4M4eu}21-jjCpenMpRytigOT!hxHo(b-OLjt3m|B|^O+%~ROxwJG8?|LtrZoOs z3@E4^2l6%_&wcaSzosfX8n*pA+R4kbZh9U>)n270gGkzFBQyYom>7dZQl-KU>$6m_ zDj!ONiiuu?jrDM7To-#_jAKwvgPPibzpg5g?@4RoVuuJM z8VH`tC;#wTGZE$$@QPct%z~cZ!2IsUX>j76OXC!@G%|F-Efr%Bio?u=(gf({? zNXwdH!|%P=$#Vyd6qBeY9QH~cRLSOfQ`ip5*ddNx{0JP3J1B!o+kA#VaC2drz z<<~vyu)%Y?U3aq9?35-;pShd1qh?BdQ!+aa)V_AF#*zS0=5nzqvZAv_zb>QbplkT| z1i6kzi%66BGa~p(GQG}xK9AUafFEVOMM4f%8y2>uM5!)eQ={XLCKe6? zA@K^nP#2;qf|<&$rHoJ&UJIjqd=X}XoKi{O5OH! zBv}YbwMH_v1ST2R_Q4#oN@)Zw{us&-88f&r7mt4cj&Hlp#g=q4^_~N-{FSKG&mojq zBg7}mf;U^O8;gmOLf05_HhhcwWDR%9Br?|c7_NQT$Usg#*H9hz11yPzR1X1nch{^b zDtVxd^$os8K5UBPim6G%!sNSF&c`(CTVq76r|#6QE#P~9usLF{a;o9+150IKRDptG z7*aou!zT^$T`cPxk7tB&MT#Cqi{^$2q8=2_Mm`FvRa3I+w%9vR^t(?RzVN?rO_A_j zi!jvcUu6Qj-a1J?)`t%Vmwj5sC%#Z_AA&08v8!q*ma_SjzgSW_Hmx3^cNRy=3VMiE z=H~#8mH;U?x@H`sD07oH_=EMlO6lH|L-(U?#mhBZ=k!S|P7;sG7*l$3w~JJEpBkL` zVabU!UV#;)886>utE3_AGimdxbd=&r+LE${Bk12Mo3=yWEu>x=W}yCcDR8WQO%awy zU*%#ZgFUk^R0bl&UuP3}+yk5u-BGA^)#{@QG)+MN0wAR)P|B%cxg{=AQVpSvCC>|2 z&B>da{^(;fJhwtUlDV9la*pYZWAy78vRkAGY5_f&eMHPy;2l;|DaAIiDup9)X(>kY zeuyV?WSiP>ck_|w@n)2GGB*O+Zvt-RVofvy&1{FN{7WnB=<4+kSgsFIJ#xATzqy_z zO%IzUoY&!{XPX*^8_!Et>psuf)-=sB*Us|pqBEnQe4Kt~;xz^B3~aq{sR9 z>>JJpauqm>K~YK;_uJ#s8jgpzZr zg@YpsUMl-7ZbevHhsW}k>@Kz0E9t^RBYI`-Ti}ZCy%n6=?J%$mHQ9vQM0|wVIUyB_ z71yp+ve|9$i`rHnmsswsZ?<$7ME1JGIplE*IHm7cy|mfpksaU)U{Og8#BXDy@S)flHe` z!%}QC(b`?TczN<9c_Ubb!hxxl0q}M|8mZ^;;;2ILNJ0#~^Qo)ka)@H*Sn||=XU>=5 z=9W^9S;LE(`-|n>8EF@FMpk!Rp5v7=M_JV~Dp{B4V)D*b!lNQ0XbvU_5kC`W>m62Y zeWc8854|j<#mi=@LqI(FIb^kB-3T(slQ)nvlCCR6i;sq*-XI%SXt5@@+7SP|JuT9m# z7kWqPiJ~RL2pfvCv{%9X2R+68KJ4ze z3->dAGY&v&XVsIE&F50h>0|4u<4$Am;7qsS#<=d13y$|f%O!a&ts?>x@a)|m?OlrG zX+haZ3Zz%tGx|x!L>LK|4-AF0%43^jC&vHmhaAGe#Z%G#~gN&N|H5d zVw#{_j)aWc_k5kgzVqIZLa>^)quM?{7@GKddBj*@Ynpp$At7WHH1?!QB|DF8?Yvt7 zmN&!gl7l(D=Wd7V_DIdxo7WGT@KVjs!w(*!LEY@EGj9N_8Zc$rn^t-S> zVQ%dHTNQ+>%ea_N5$5n4fyLpauIh+U4!GoM#?udL&{X_*v3bOh%rXF$W$kL5ERJx0p!?WJ5i>AQ8 zAiAUe7FH)wN@HNX&^=+?{~Ghy_tb|1K0Csd)P?E7l&o8jHN8wDD~(8C-EW*3=`D=r zHZ#uqmJq=xaba7}f9WKpbqh%B@I(qfTe}m5Cb{QD1Nh4Iq$9@($~JwR#ln>LD)*g) zCZ+Unxh%4E!~oZ!c%)F2SLn(p67u*nT8%5jUe?KH`cFIHK$x&CCO<_j*Fc%*&{S1D#=5u-ux-qGz$t zk@H)4ZEcW>dUO6u*!2wDlDRRuVLPmjCFUaE!>O5t9^Q%hOem%t<)me-Mk2%R8;YSw zXd>dyY$tLqxpr_@>|o)PiuxzU^d*kL$q0kOh|L2bxk8pAf3@n;d(jkcuGb7?$IdoR ziIkoXfV~_W!3-CK%V8S1h&NZiWx6MbpXZ@jvDMtocXtr$RIA=L$+j-B7?KenJaB>W z_+lDk^A2J*hGE2?9ulPrcZ@^C03QE)`eNviq1^gqMFdKKiyc`kR`_kByu70q=7!cs zwd-4k$$l;KP-?qZ*e%n1XS?2PTs<~W9UU9zX?m**B0bnjkRXzH8@hNKS}!|lVk}p1 z^=o%I8REth!A`^SNOku23R#$s)TA`>LA=F6l;C1#x`PHO?4X6xsn$R;EWRVMQEt3% zwTI5~3d7KT?>x(E5wmVtGP*=h^^CZh7crv?k!{MIVft^0tr5Aqg=!J4PwKY-7Oa1w z9J#vP&l2*WAvTP2kG`B9=e#l4ORiF!0Wg=>=(px2o7B1C6t+LqH- z%&W<%AycqdftU<-vd~b?PLkR-u89x65i$sL3&PjDMpG%6LIUnf0(?rHxxlovTrM;g zY4GV^z6+_ z`@8Aj1Ihe@T?59U%f5-DF=-Vg#DXOy$nd3zyK1r5Z${M&x^Rw6u2;k;5R+LWWS$>B z=$6K`IyCKJ8e+v`{mp!v@E5AHTk{dWZ94?slV+)cAYnBz;6yaxqs<8`y^4TVl&q%x z2CDE(F_8%rx@MJw3RE(D^7PV`SF2)cT0b|VVGg9+tB&;XIioxdR%f7_T>Hl?u$HtF zoh+ebv1ihaDn{i+ftp@XT)Vt1clW6|iety0 zlWS>1)ouX^$GdvLkFR|k#`JGTMEnxM}lKWxp@MlG*W1*Qz32FYurys=(?`+Ze6 z>gDBO_=*$Y*Qq$5*OaPTuuyF@^$agQ6WZo`AGviT$t<)`o~ ze#LB4x)OVnFM%QX`)3VAQ@4>9AF@fE4 zmXq#ADK#jrZ0imiB8l!+7MS&26(8w`QuD_zQpx>Mp-7iwf(*lhD;${Wa0JWaIV=7< zDag$`7@2b70$+87nkUZX&#P;XG3I_GsM?R?EJY#2EdL9Y*gK2e--M8KHq>~Dz1V-8 z9Rd|@gX-6LJJT8nuZ$|+dASb5bmv$U)Sdq9e8&Y5!g)<92Y)8c6gn1)^vSND zZ0IggI|qGoluEGjG?02kTNyV6idM4=^VJRAOhGlhJ>wruNg)p~yyvSB55QroYM3RaV2=nRD0X z2p?`hr>8*xPn>`8v6fAsO6L0%^#%S>(Q=8#kR8o6s$WN=(5hVrN3pMywY01dHjIej^>c7!-5Bo!x?>&0q7@n+q|ef)qU&kn2MU% zmGVK*r<_h7TSXAZY5P(lfSgDb(jRYcm!=_6kfFn`S}(fn-^pxb5Pk}uv@BCfs&#u+ zn|oEnQVxreOC<2sXGC>qLEBeY>5F4g%k^=3N~kcRp`X(D84>C8-;BH8J*7XYeUmQF z6NVi)&cK4YWt|w?G^DVzlQ)pO27raGn&gOJnt4X4xD*&2lU>*YK69NvO00sqn9kJr z_iwr}NtHOGYOlV3P7J$=xKmeCO!?neYrD?#jK7Uxp39oN#I^ z&$RXmBn1vJh4wa)z7lyp#`9bDSzNieU-~54Ot^%Zz)(j7lF43l1|Uqy5#3hl+pTOS z3s7_cu5%pehU{I9pBj4{ALM+HsDzGHOYA4nU7P)6x1&}m_>9Oy(I1q(n2%@hnv&x^ zo^(^AwIU}B${($(4rYEMh}ZE0h-9U=5UWYrj&>cqi+%yMa8}ajvinRN z>hag)Ww5q??DPFpuS&abZ!Bazwe^Hl73h1e8e_e2iS;Rox`8a;;8h?}I!MWBTmrn% z?(QcS(8Uj0pVT#tT`D8B_3RTGKLxMULlsT1=J@#cJ^p+RD&WdqTs}cwzCG#0 z4N78iC4Mp=ltp`^wf*BjNt6}8q$USPfJ)a`omVe~ODFH>FFVSx$#N1dO0vA@x{voa ziJk`gc?sYMbYb`+=P;KSiV%3Qnib6oZ)rDWh?Bbhpmb0r`<#zL)P>*SRFPNB6(2v` zy~Tep?!YckNu1zda3d>@Pk~x;X*yrvTVz*|S3;#Xv8u#9w=oFgyoHAVFw-y?WUvO@ab5MNlnf^bVu0Wj?I^w|5nqMnd5Pi zQ2tAPOsCB+*SFaEr+Dk3Z@$^ZsaDdcI5MPmL0TC|#r@IfUnFA-1yEfvU~6`x9grubvZ- zAUG&suCt((u2g~q3UJ^p{5T=$&36ZkfHe$LGVhMO!cH$6JzQeiBsF) z-Kz6NpSwF|LF1ru7-{SIkr#0WCRri!+7W?^Wt;7g(??`eC&`c%7kn}^fKHTw!F${k zeWDIZVgS3f$k~Rv)9Phzx9s#F<>6U-oBXw-D>+r(`vkO(uD3B@JaCGeyW>Li-a^c6 zrKYyhIp2b|iS4of9NF|*(_W;j%kYH9G5zurHR?E*d}$@t*xy9EZxSFWZciCDzKESl zg)+N{bPn4g(S@PIw7BSdmLVi`I@2$f0V#XA7|r2(<7LZSl51@7C%c1tIyCN|>v0#Z zJ&~b3M3hTQ^;*wBFIB_putnHzd@{2)+s~HuC&SYwNB$STdsXD8Ts}1{ny0VAnBm~r z9fr)1b;l{0>B*7c;NQd_yInbV4g3tBvDpzRCi9N@q2wax;M&;z|;-j718>y6{o6UA zd)L?3h&q9boUGUQI)Oa>+uK21JOO*?TY(p*HFTOE-RdrOE~+n|zN<`D?BErR)Is4? zW0;gsjZS6;h9<}0;Z)@n4UC}a8S9uC8Jhc4luNWZfBb(629+&<@N#H{T)Thb5uL!W zxd4kpG1%cjC zR6~N#__3+S=rcFI-w%-a>;=H}x3~85KQ-`(4dC2bnV9RqsL|PU{;fCove7m`m4qnL z`Awrg>G{WP_O7ibrbdoVPR6W_E=FKnnJ^1;pj)&#bU@UC6!}FobEvoK6F_1l+Is+H zUs>s@~?DMP*N#(etkOw-@wHDJuN>W z2IW+DcWilVVPx!8ckgB{1}Kp@4@mq5>zhY_0_C@~mpO$vg>)9c(c~Yt^U5H*lo=Lm zZ58A(r+5YYMQL*e%j{m=4m#VNZfOPWSoipX$k5!#$oxtPt%%}F>dYw#f>99v+-1HY zeHCDJ%4hKp%E-vbia`T%1_IiarA_~K%s)0n_{A{>T5^lzjT0ul>bD(nVZ3z zCA~1D{>%=3w@v&2uzn^delF5~cEd?^ZEU`em4Br7e!}cbtSt}j>>^$|TpWCNfx+iK z$k)E~6=nAT=<2{0R%b>ZejUs+;x}D{M&`B;yTV%Bl3JahvMF>qvb5j1F@6clKN~DK z(meUhW8?RAN#K2b15=-V?l+UBMqj?3oIP=eyR>^B*PnI2p?FZ@&-A57CiS%z-gLolb8`^-U=JaG)TOyRfMk&U628TCrhv%D z1;XL_NFN{^fYVXG32lLr{`w(t(D+LpA$YDTe+8`p%UJo%b)ilF5a+s?JVNwrvVJod z8TxP-Us{-eGy`XH{RB$02KSj5>9pipTqg{3=@zY*7 z-y(+QKT$^39~8ZS_d%0)gx722*HMrYo_7L-Y`;4^ot?1vxCyUAoL z|2#(L9PKXsTw#8Agd$I0SM0#jW|>6X-XzWBnMH*wBq}C?AUJ zN0fgdKs|CtfBoqD{jKQk_C*o@;uJl;K7jNZH_~&mfBEY@Y`{xb=X+|SD-6J(Mu8H4 zATa1z7rQAS{;@qFklonZb@!U|<(0)75c_j~Ct&U$5q02Ill{YAx{DD0vj?!#C7i>v z00DGEGVjAQ{%a;`uR|iTH(tv^O)pwolqoU1)pGs3z7K~@5>?K@YTtLKNn~A!>g*&D z@*(LKzW?j8wE={(k$PM4HU6HHEn{OKUd5HjXa@pi~-Q?B?|Gd zAoed5>bDn7?QYE!n9KJhjE&6qe`Jd`p?RL!H2V5z-0D;*7`vR0kc=+&lLdAQ5#$v- zBJ)Y44r|_1Q$=ndYD^fF8iH+N5)j_uUl8*hEvKXjjT*K(=o}|tQ@mK#nM2Q=iv&+@ zDYG?~)ieo+>kX8!I5{OHPbgbaov-c^z=w3fI2E&~+Q$SaKHhHZYK3;r^Yel$a-NorTdtA>U=Y=(RXtGx^yPGIiP+WCkZXcUmG3O3&$lkcNI z753YH!c0Em&nWa^Evxe4MYrHb% z;!44vyrkWBYl}$Z7n$dQ-X;hE7J{KyedBD9y!n>6`fl|6bRk+%|D=iY%tSh?l4-AIZ#IINDlOxexY^6>} zHS`7XH6yYkZ_|1a=#Joq<#tguwA|$61QN`*-r8Yt$+!j0P>W@=ySJs`U30^0Z8!_- zZ3)_rvey_BztNNN1Aidx@%Msf^%v4i3~YKcGiKr zdmL3I8&gQ;_Qcg_6D#+;d9~1E`@Y35RDw}0vw+5$u}?Xsxyj0o27inL}Q8tV}E9e6rs$DOr>n7X%-%+aoxqr8zmbm z31OUkXLeAH+BN1zS0YRAe?06DC?cj$4H7n9_T{n&KhDR==gO;x{&;IPNNxKTuGKf* zd-CW8l%adB0x7R}udKy5^ME^a4^{{msQh6^s#fa8S>Ut}R$mNInVofHT&>~jzrD)O zM};Pjw5nURUlbC3@eu`YR_``E#{^?Oz$Z z#%}|fp#@Z_lU3sK)5^>HyT`h;F!)UL>@EnKH-zX2sz4o)t#%8Dp=d4QC>U2>FRkkl z2sHGfb?AY&s|y&yVNFkF#&Oe0)KlQgMXlki6%HchF8wYO)Ti;0jzo~E;Mm{G07g!6 z{#vd~|NI;@I%pEi;X&c5P?%Ws#3k-+ale}ig%peg_H-$&^~a0(T}_)}!U6+v@!Pi= zDfg&)1|s+`1B9z^j`uZLpukmey@&}Vn4rj%74Ad7$dfo=LKH%TVLnfns?=A@@XT>q z4QSQ#o5%=Fx)S*5BZ@7oZ=TRJ)b%=o?5=V1CZ5SI8+pr)sMcsXVM1^gPqKXD=~P5y zoME$(QL1?Rs4h3CL&WC|Ihu9rjW}Z_)R`(Nzv!q)bgfc~^oJogJ@lh^r_MJ;yjc~c z6tIM3RA69%nPUn`hx<2GZ!p|4gUAVY=5y2Ps|wr?oXQBUVi2w#E)jOr#mrj$V~|$Db+fM zeChE&@uE@=?>_(5w7!`DIthGh9z09m_?L^q=wNRkM&G^DA9vNs&AOteZOb_YgM2$Y zjkwxIA1H1~Wl%KUsP(sc81{>9F8EdV7M{P4?lJUU4o7%^q2gRG;9uC{~MRjWl)U&|k+n3~J;J?VMXt0^6-yV%H47K~&@5{aQUL?Wv;fO$;?z>=PQk^y?wb61rvfogi2{Y$$6i|- z!W1yVC)eNcs-Cg7BtglZaL7G0GR}HXd}1)q07#CD*Qoev7k(RPoFmZfq!-BO5F77$Y4Trqf@MpT8*? zV(%d1zT|?6do4RpN$(1)q1iag=!3AYsCX>R9;3t9(}_}q4`A3xg~@E5&dNc=I~vDE zg_=11*qB)cD48jV_H-wz)R;`WrOW|Cb4-DHP*vSOiV^~t6sUho;=$oKjyTbi%8@G9 z(>4#ml(N~6>qlVBm(0Mw10*Eq%hLw<$*IlacI@NQa5$70eWLR>(&8# zY;aHh`X%>XkF`l1R`hxBf;HXN>L6+SqA|#D#$-!8l|{xVQ_)bm%leutmWVQW^&|lA zPd;i;zW&wgy6Ui?Z=d43Ml@~k?hCfFw}0*6zY_TqY&0kjw1xYwVjC=;mkw_qklS9) z{1(%&DdW9k`MjJF{v{CqpP(m!bh$)j6s;dagoT5_ohj)4yAY%VV5(np!&sQ)LTdZQVJ9uT$rgrYNt8?2(}ZPE39+ z#cKt9Y$q6F;?v3$8x*{cmH5^JG250!J5&K0{{SY~$YMZ6XigYAjWdm#DV6hB!!p{7 z%q5q-IvbV`z*Xu+@fGmYZuIvjS&=C8SacM2z75CYGp3NQtTo)}p(2q@2yJ8)a@FB} z#Rw;cPlE&2G-|0Dod7#yq_w|BzN#^^=|Yb_qpCa63I$4z{rJ5`d(x&!aCDL+dg5E% zZKV0~PI_Ik&xJOSryb3i*CP(6yRzflFaRlm9aTpKuf6U$VDxYGc?vLaZh(hUP9(D8 z_lV2smh>D-sA;J$5iR+(pQ|*UOTESFw=^`$uL2c84e6)5QmbmrNkkM=b;-+qZ#O|H zlY3RvIB=!*Z`&_SFFb(!c~?}+1=ofYDKON446-2{YYxe$TJDkVF;;fpuLto1#f$~FESv5t%TlfGCn>GEY8`X1h8ti@ z^Lfw(45e+24gafRp?1wGJ{#iO4?Cv^CCi9WqwkKUBCpf%p_E7Xr929y<3`F7xOHICe+rc z`(rb>a-=;*dXf~kK$Htsl<80ezad;@$DIkR9W1Ulh@}Vb3<}&eL8J+bilJ83Rtow8L?R-vT-{cRB+WM&esxP_+oWJM;2 zUWWn?9!05JJC6=yO$nQaLX7Wv6cKaM;CWg#opM>; z-XNYEHc4G2;c!cKEK>d&t{0?P4_v@Qlu_iX;tq&${sqhqfRsL_w(YnJd)eGo zb15BbSjT1lj#F{ZxBMH-jEE2*DunO1vVP~Z&`S)-wb zGf7g0cN0Np><3J3R(j2O8Ow;|;Z&hw>d%g-PKX!5{EQT(YX?0!y%YMZq*iQ8#5L6d z;S|_Z!Z%RZ;Q2hR^$cXRkOzF}uBj!Dq~DG;$9>gdoK};EKt@kdSrv0^S&)?4!rfdc zKTDAZlrZ0^&;w-7i(8 zT|S58}J6NwTILaDJWPUL`FX#8ulxTViUiv5ojuF%wjX4!Fxb-FM?`P ztIU$QvCuJ7b@{;!LsOXSa&?#Ze>@9RO$1M}#}X%{NE*X0TNEArdX4W*E66EoyN8rB zo)*}p`rR&V<;Q92G(`A%(av!w;+!BJKOXAPeFS2 zY90|AtOl^|*FZ*TSBPhowso$tu-RiemX5B;uwu zjW!rr$?_XVe*_xsVLIm`7m30|68&&mX{XuEJi7v^&<9# z01PQ`LyLQE_)s01nH5;F$ifTWhRt(X5Q*6J)?r(Ul}pSsqxmrstt}ym85b@0mkv~R zb-bmpii{*EkjR z6y&Zs72iC?Ocm5>EeJ$&JQqxnuf;q+taY>U6ADAZdV@rH?X~`)H>1soVQ}h#NVGV0^b( z%8p#ZbGks{gM_k;HX|Bax+Dk{H;j}CeV!Yp1dz8OXll|CN#o~??v-aae}uSozYRsQ z_dQ1Aa=D>5+r|g7YM&Bu4-u2}^(EKa4GQE0TjQjDGAFYk*6fhBQs%m~^A7EalOEw1 zc4uM}pB7%-B&xSpVRHYZ7;dF#6cdJ}86BF!CQin$w`D0JfV3dC)1{;6HVnVeih7M! zICCRH73d}_^Q9JE237IX2b!R>@xKgyE;Z?>un@#XuduDnS+a6AKoeC@_{knpmeUs~ z9lDArLKgWKB<;Dx1jb>K!35f5(C{!kZAvjxJB}V_Er@?wY1l=%tMhO{M)z_HFp#mh zZZtb17T=7nHsFw*(~KKz-o${&#VKQ~WFmY6@u3;I0D+CktKetuHsa{3)8GrJm@5m} zPTpr~q%@#`XEqGbjBwmHMnnwXQx(K^Cfn!xVY!CviQU8$Otr*4-AZQ9l)84{)NM_#asZiI zlo`3w&CbD?(%&=;of7W4`xn`W7-P3mOtyf8gEbYdFu|<^cN@lIRx9wR&luTn36rgJ zX&bbo3|D!SF4JjzyAO>JoI^0AXLdTCKWv$RR26w=gk=kd6d|!ahgH5CQZeA95?PcQ zDAv~|Eq1a+)PEU1e$cSBzs4wz;-}bMMM6~S_^)_G7-YBTcU=>)G&k6ybIprFIxD-= zv<00zVR5lOWI|{K^jjeJ;u28_js?2+Mx0oNLgm)g&VnFSP;6H2v#SoGF_mBpb84c~ z-Z)PA1*imtfG4U>aOS-A*cX}cf!0xhch9E{Hd~oAEY@lC$}!hL>m-LUu$j_Wl8#S# zNcn_M;Pn$7yvKf)YY1%@TdMK}I9dmZZm83{^eI1vEaG%1ooR9R@oSk!F`h>)SmuQ1 zgZ9s{e|*WV1B!#JNwncMo}HOLqe?_H#>OA_WNh4!`AtDR`hjyC8t=_$6^S9{1@TJa za(bCoHMc2W5MSNjee1SdOPcQRI}N&*nZB9In~-*`zLA0I1aYDRf-J|dL_?e}Q<e+HBjlZQHhO z+qP}nwr$&X_uIB@&R0|QPt9T$v&=44sY>pX+?-?iBmBl{*E<~|@k?$v?rZ$=%-_XF zdn>|f@v17478q~pA3=*gPEsc{M(7YHX2yFLT!A0Y*e)Jkgd!v8&cAp(a9qehZ`hJ( zoE+vR@`s?jnN1cFxOe)6;{mo%S(I)MW;dUU(O)AGy3K;RtYa|mU1C{{k4INP3b!ZbXS<|~9jU96~;K=@MS=-o!R z8oFm&#Rsxl%7wso#F4WVGhT?lDT~6ni z3{AY4=Z?m@zOp)=kbx*uya(Ad18!VXjK;aSRuk>8+B>5Re~0uc9&w>CP#hIeI!_M8 zfKjp>Mg}OoVf28V6S?OrKJuS9g6BFrNu8xvl62xVu~V=n7MH=WgCu`}V5*S}O!1md z(Kat_I`N1dH6)m|FmIT{lJL5>-RoKYG8GYxNludp0NZ)n&WqZf;5PMMe6;B3lQyZN9Rv+k z!`=cl4xNX@f25*FQwF=23iIaj@~LmR9<&~8hmZMH^;3op<_MLRy-$H>djTz!t-*aDnh(e0JNlsKJwR9?mj-s+ko6lSS(9S`43{UUXI zo>B(5GU2)sP|$H`Z}p%Vw#w4JH<`)rG|r=enfLDoAt9UfOvV&)@Smdofp=ZF)|w24 zfX%vO0)emq-iE2(h&Dz_Px$vQ5g2-72je*K&HyP=kCU+l%s=L#Yf)hHU zPs3t)uS9M+;pcN6>T~^LnZ3A@>IUoMI~J5az z4BRLs?IM`sa`%v+F9b{CqwIY$?I&~JX|4ZuXmThgX?GXeG4Y^(9~wZgMF z+ozTO)LxFYsIvzTwEZG)GNX-uR`-L=QEh(7C1VYq^W`~X{aCpz+G`9?>G=;Es>%q@ zkg&DK&U@<_^W0XFeHF3YaRy<;JB6LnSvWTDSLm30V+E35GE-YPq<1;GR#hUa-9_cz z$g&fKPtdNIrV3#@tmPA{Q^MT*dgKGK%`pC)_P(4$#cZ+`=I3Cfy+E4x-fhS+DsTn* zZdcPRK?7}hMG-G#Qsd=6=2o~f#C$TV^l`PokunMBZH-u&ckIlVH0<>2r_gZx6x6Fq#{%F6QQ`CVA!qi!fv-EUZW_#F{-7$(gx3Toe5SstiU!zQ$LToRS! z>*c48EGj4qz1yh&5f-Fj(he3%_rUAFuBDh^ssFm${W90nbBWRgDQ*;xN<^JDZ`x^? zMm=>)rCS~bjhb$UFz4Gyym(}iwbJUYfGG}ve_e=<&2za|&w+t-HRU%0|HUl8CMkG} zN3Kp!S%q{ze4IF$2JB$2PcNS<_7E1Xpt$hkN-*Q4z-{_HyJSKjiQ3J=qyzC*zBS%aaNoQN$le+N6^;5Q3 zFk3Uq`|TUcjUPTQYcbk*es+no!T%G2+D*<<;S>y&^qy`kh+eCAWV7wSzSgtY{rh-- zF9rLyrhV zxBB5`;`<9q4KW4^^-uVHPvKztArSG=IdzT>G47~(HTHoT+EB!ja>TFBn?n0R&?3ED z9wOvJFiX*rz*$3!Q8<(uxKfv}k)=UHtsOD_f%l{Fb9U#NWJz9q@9dg?3VqY(B|z~r z=8thbTOsSq8uXYZ(?lLdFR_qp z7I8n@Ef^lglL_!(oPgYgu#c>DZV(I)k)sTnxqymzlf@e@r%v^-9IWxet+EdgAtSSI zU;Hi~BOIS$gG-P-KJBnYGwcJ0AT@B_@w5}w8V6dN4{wbhAShrBVtM~)02fp!$9U`E zYB%Ql7t;Y8UMy4%@844X9S9foH_iJA)z6C8nlSt%uH_rV04h`>YNV=qk^HeMAaAZU zL3ME7#Jl_SQ7Zt=L=T=6RTEy;86X5~@8D%t+Z`-3JSAYkagD{I!p*OtxY=~U_Eg`d zYUL$2Uy2%vsDh|eKYp8DjV~@LA7G!EKXvc;*?Vx{55`lxrs5Xu?XV?G9eX^CSmx-OdQL&*F6gQYJ0n#i@}dfOt3C{FzsK(e_n;%*PrE zc#gxkFD8_=ANMtr*;Yg&n2?bs9`{s^6s{MX9y!sSUxO%$-Ba|q$Hng(e4&R5Bd9Zs z4R>`<>m4DBDYFA&>{&>sId6wX92vGYmPAQ0@D|pTAO5~)_q`k zXyXm5<#(38soo;&9Y4kHh>2%M+W`#+m~DJJ=HwWVRGb#Is(8K9%LifVNqfjPW5CQI z&0vVf5n@5k?XE+G>SakUa6HFmxm!)I)BQEH=ttJ&dRPu82w)DQ#;1ERhOijZB)i~{ zj*uMvo)+3jFXl3NQgkhHsd;U3A`~(4Rct9m+P>pPdk%algLMc1_Be6lrScim1!YFq zkd@6L-S6hum1i-{n2hW>`&FW%Yr~4Im$l-}0`^OqW30|Q{@uzDn0Gi8sl5KCG>8i^ zYQ>vy+=xcnGw&g$kZubiAY1d}f&spa3_7CO_Dhf=uI|$-k?zyOM)|?pKx~p<-4UPo z3_jC$h#=FI3U_X9QS4YEb3UX1p%B$Q;NSgmMmyy~kuf?3H1!_QEy!lX%81D zsa6=EX15)oX~FuDTA6PIoQRV!Ex?K7oPa+Dbz{e*nzSL24To-(7f73t-%gV4Fl+?F z4Tz~C@bG3dY4+H}p`|J{vEAmt>n@A20VJhUurn+$xvX4kw-mjx>?xFCc3#x>@ogZI zbq~FA*G7ra$+CTeQwQ_wg&X8rNq$C7JG<9T=FQcOBslRsBFWL-&}JLkeAiD4q^^4e zM8?R5gd^Ga{NPxItF#WS=w~{Y`XwVXaH=O%%?f9Cw!CfKq+H!ClgO-s2ZMzJy)bUZ znjP;iKBQnp;i$TE3v?bXdi(|!xOJ+#hcq2zw~Yz}Zn9BZvYn|z_{hxrdbZHKVT4-(NQIyO zE%h#IhNB0%R|_579!M8A?#UhD5Ak6Vp<= z{21}Yn5yQ~lo=x!gXb@{I(LGPf*q0?@xdYXa|nARUiOA#6|(ygK5>cVv?k$)J9K^g zE9R3E!8-0UMozyr$(V8o8FuJeyKqp6Qi}&H1USQh{+pvgO3EoQ7Kl8Du+O5Gp-I;! zN_5b(IwzlX>hm<|%)+>p1Co+0pj$9R!`X;tOh zplnCUWau+2Xj#OAh_sD1&s^@-A*5MDu91%AX%swL12Yn2X;0bf2VKbaf1+IPYiCR& zFgTPS8Q)oMS-q}!K@85TS?fP~nFwWmYYIhvYbzS41EI+X)7+{F7T=MNr$5X4-3l<8 z*Y@^#<<{KbdD-|B*a44+1c^>`Op5^ou~cE$Xe5eCBZiAG!p$z2SA9NMSA4pm;|9E= z?f7CoQ?A&nYe~^P6g`j!o^180YPP)k($f##+sqh0xODDwh7J!wCrw^6ooSk z-*w_!=+C^BWSNVN3GhFcD~pR7csY90a`wwEJ-Am^X+^y)S?!kARD{KqBT(ctN46fD zoY3DWwO3@oHQ~zNy`T~9ez;fNl=`EiNrxDU9~ zzO|)vK+Xef&Vd%}-AjJV`Crc&vhpjRvMb-jt1F|LR5|pB_o-g@Ip_ni*PT6N=w11$ z>q_qJeHw`|8BZuGuF|6g=VTGh5dxzmh*AnDb6f1@(LObH z(r6!gYUg%YJ-QxgH%e7NjDio^HCeUL6h_CXrutQ4<0UDiM40RI%Y-@cVy&8CdCzM> zrOyr82r&=qOnPB?49KdG#`J>;rniKobX5g<=T6zZTl~C}I{9{_qC$R3CGqfL7GH%d zX1ns|Q}wcir>~Bdwon3raUqT^E{7cZniO*>0iv1UOfhXOlu{3Ko5@6)*>DutCo z+2F11r|fPtAf<4fU8yV3RA5WUP|`$avZYT@#l3Rd^6E;*Q-yx`${LHN?qkg&b!yps z3!p`fo2CQ@BFqLU^b(cm)?)h7Uxt_{ftU*O`cr3i&s)Au!yN67Gdl=h^Kntop-~#+ zz1Z1kaR2R)j8KyR6aUf*Ybg?jAYA)o8C*gj4Q)EKio%DcZS46RI0ydAWcdM>O=t5} zWqHWZ@1xmHD^r@R&$9q4Q&PhPYp0a-ib>Vtybumbd|6X()TS~jEQj|tPJ|2p>5D{G zlr+*?Drfp4dm(aHjH*qnk9Ix)8dXB3oYfBH;SR1<#UT!#u$N%40pxAMdKRy%Te8v9 z-8X{C)Ul(D@z#zm^jhJ(cIe3cA!b1@h*h+ai_n3?jVL$jR6qUIRE>ficly?b*N8P1&E{F@69Myx4ZOZ&{AH-Ls*G7YXqjTxCDuXUY%jD#nG@ib;Tq_)u?p z-d8hq@>?}QJAbjMjf9$#>Pzo)-%MK^9)AOfcGA=-zf>fHnw+Y&{NU8_3W5=d*hOmP zCe@w@6%P^?ypgKBV+e$h$m?VTRFA`Ok*W&ki?ii``4@s|<+|pfxZ18)A22bfSg!AZ z#li?)I8n0)4tL&C=dQt)mA)~*@EJ5E*NHU!q+LHdAXaa5CBb?3O_Pu}yBZFur-)qf z^C;^vn;-UuK=7}{3Xep`Eo?zo=(3KEQf!3+teH>B={0ROUX0lJhSsmXeiks^PoZmr z))CQ818sd4)xrw!Mb|0N5jOU}`z2v`Nx#f6Of4aP*>ZzG7-5uTh9iI#R~9Ai|JaqQt>3rurjFl%f8w#5Q5bdMd={ORv~p zKJi+$28g!P1+CpzK%cg`&5Ho-p>9hO<4+V+)e65MOm4}E5r&$>Rq@L~c;vwvJkWONDvwOpc;qs=9%R=hr- z&Pd1z4{V3U&5mr{eQS;LIf;yaZQKim<>(f;vM(!;)0oj}^Ad}SwZsTrGwyBrX$mQLyE#EJu}c_8}vr(Z3Zvy>Xe&I`QTG~`tm+aIJRolga}g! zPR$Ov^OAW0W&EqNXvZSP!EHamKs0?b%_NH5-P`A%x-J*fi z&tlL(f;#JAAieSQOG-l@Zdm%f_B;$F)KQgBFDs$9j~A}8+VsD3(mNXm>r#0Mc6he$ z1+~Ov?|{!<9;!CHiC`sKP9-_^3#T#dbSCr?8wsRRr@XJ%9k zwn^AO0vbdSzk2cr&&rPG!i7aU-xqY1@!>Z>k;1~t>-(N)BnHo$omyk>1>qEWY^4 zkac}4q3WpSKK{iUsya>(asSooZ{Vm}+NoLE=7N&CYoCgK7!w`m<}(gP;^a4N_r8|z8hWOnLUvzsVZUc^A13HxzC9~J0S*BWC2 zhU%agaN%L2mN>o%iG{aZS2>sypPX)RzMywH&|LCPUFWc7RD4Me|MZk!^cGCgjc>I# zGu11mBbvSRAH)+0nT$o-&@m+jU2vU8skfflZ**^h1z$_^^%j;^_4wk6X40Idwj!ONh!7(oXb4o7{w~>3$Varp^J1ePXM`(0?SSdJ zZ?-`UN>qYkvn3zu138vx1xTexHWK6J=mMwgI%xO%I#p6ap24lpx_60o1=+Nz}sw_e%EX$;`zBp1N}cC7i~(Z%ztP;*LySsEvU+9 zH*ci-Mf*7j@v$Nu@I@Jbfu)898GTsswogs3&@ISrXKUiN*0jv_h=@UT5#%bJGl{O` zBm02hz1wGvevL6LIs@@WzH(BTU9sMPprn7BoLD%hQe^;jW1Ej07s!*09_aoc7lyhp zP-Z@D_$r$7gD^A!$7-=I8ZRJE(gAYwS72;q(?_FJ{i#;1s8w-CnAc6DyNf@eBEBZ< z`EdQ4@J^|OVTlbiF%H-|YS!a=V(JC#Y_S>CCoJFWnyU(!rO)f=E^6xK-gb{^rm>nT z43PKSSZ7v}vP@AP+H;bltH>UkCs$?q*7KOvovK@mHQX9C>}I$%&CQ)W3ksO-bmuTk z_Em>s{jDl+R=8S0hZnFl+rw1PrO;Yt4_B(RfL>_5&>8^I#GAhT)o@}b`BBm$Y47@2 zq#fI^PBxpQiTuLrz9!&%~;+A3>87@+@Wy`N^ zgYI`OkhXb{Ic!_mNc6d_JJEJwgHsM3#OsaY`tyysQA+ygrJzok`%hIn5TCT`Hz)>{ zvWkd|lVXt_tIV}vuSKHUKEHH_%1^`Y*BIWdSb#lmN7d-JGg|-B`OGTz&_9S&v0w5T z!3mxJMQhSm?}GWjP>6}z64E0r);C3{>0ZU1y;;0!5T9+yFUaw$VA$z@!}KZ#wIoh|Fu z7$ggX?J@>KJlc)2K&R~C(z3}Uzqtfy^bQrr^6GEz2uZSBUcGFXoM9tswV4c@TxHBH z20lI@<8mP^-9$#fyw`uRXy(wh7%oZecx+qYJZwT0uYo~yyHuT7gzHYrYP`JRa~aPv zAd6-Rr>wpN@09VAm0v2qUb}n6H-a`N9M~rs z!Si`c=XY%A+xX+@K_*1-FGgwmQUMBd$sX3)zhp-{aO{E=J=YlgJA~A=5$D8@;KepJ z6j2-cDcRIC7=Kjpw%x#ax_+X>!gqS7lQ~nZ(XxW;Nit_$^1|4rJ6eu<0)Al>GrgBG zA06k&R`OahvtB}(Z&#=1K7b$et$};>Pend*o%~tC>A!C0LQU*m_sVMCTmnkBCtfln zo(-!I<|zA!am2qHm{i=BEM0!*Ci0)9wL$z*J&cq5=EmD*BtQDTBi0C>H_)xo{m)oD z(OFLi<>L!4O*QPyLeZhb@VW#OKVXV$Y)e_?%)uRb@*cy=okitj%SV82PxZIvcvCa( zL$5n-CnrN4dmuS`y)^Mi;~Og_k409ao1EZGc@2x90bnN;9W)mW_0)cdDXe%%I(=!$ zv4wM-2+{*_4KY%vt}<)0<3#v12*J!CsHi`CB104uX|`>u>h8yyu=tS&5GWu1Ba9G( z6}Z_6_#c~K_P3jzDlCk#X^_EL({KLYfrtwZJ+70&dGzgUK^;n88pXq!@8`~pE#ZzOAWVJ9+9LcxPKbgya9AVd3?r@!^r39)Se&GGn6 zG(hr+tK_XD!w%RFk0a8ClLo|F@Uj!wBUPDKEX0#cVnkp0-26ib*$zcKYpGMTxo}q2 zm>5+VdO+8~lMF__HHh8bbCkRR3VTLA;vJ(47L0Ir!tG!P4?8;pO^aQWcQ7MA41phA z4y#<6aS8l$i459dI6_ml;&q(as)H@J%z#Kna#*W*wm~mgC2g;HdA@XQVT~ZHK2mgi zazbn~g;%{rxnamq$oTf2NaVBuxA+i72>f8k|8cx?|HDItw^tm+F~QImm??GpUWP<- zW>{U^R0&2IckjG?{{l{wg3+#w>fQ$-K}v9|kyc$bEnkt(I?X*!f_RSU$f>kLM`Mv7 zC$(1P4piTo*6KD7vN@dER2f1dV(`)D_-vr5!6^Jz<;nH$a>#bU@_Kf)(Id8{u-9{4Vs2WTsHw|0TyR>= z>XjkDANb}q%w~FY`xOys&s^L~bfq!<2?rkz?C8j`1(&}1?IU6h^3o9?OUDQ~RkwPn zIo>jt5816hRJpc8+Ud8BfO1T?oejd!L7Zj;G=N-9F=*~>u9cFH=@e3uV$ii3DHRz# zj^Ns{9*PjEF-;_7#J!@KVG_BKQ_^>1;2=1%-5C(VsU%hcHG=XR4doKx>8`F}dbU@; z2DddlD-P?LO7cP^U)63xuDb}yb>yp|x(b?JD|Qvx3^5YmEg_Kdb2{u>VbryTS_vap z4(3R^XsXF{hTXsuLz1|Y!M4hv{w8unEKAX^7Thf2)O%;Wd}AQW7QIv-`lwt z+}s9o{;B7d6DhYoUvlPE)+fD**9LRtu1sKnl;U&Bsf{L%o+-EJeq??m+ z`N3uM$bPneE?0t<$Cy?>OWxEnGO3gv8&31$aDydFq?hCT{O3#Ww+Zw|qasObw&KwxiV1;xYjKeP-+0!9`N_Wv0%5iqeb z{~rs$|1AVyW?^Ul-{g${4|GPX3M7Zh%~xCrR^|Lsn3IXVnQ25wA}J9H(jzCcb6B!t zoF;}5O(~6Ni>AGr%c|NIx< zo%f!&>ZBue-k8Wm0&3L#g9*?i#D>A$wM-cRNfKS4NYTEEYOWz4_9xzWWtWf+UJQ{~ zKLeWsVM6>UjR2omi#Xx{TLNr?D_~O};^shv2oMEH(t$hC6e|$T071ro3U~l*lt2%T zRagrF2=v#76XPo%e^3^TEP&001p)IioPrNwoeV&t0N#nW(C=PCl|Mt^k13FCc9Kyb;)-jDhEg0kZ}CEZo=tWzZa7!`=1~ zwUklx03C<{Ae#(8LY^8D1VbSm0Bzh2D`RjD5P=EyrXBVmI0kPHfJ}kkMY}eyF2tA_ zlwcUJOMCz#LWV=&1_L$_4vkI3_dy?A0FjJkk%U>{MlS}4kWB(y;u#xUkQxg)fCyO* zZv6PcP~dkSAb2zRd5IjmVBBWXq3wXrFJXxM@a)}u(3wz-jm~fcbNY37K~RZv_mLn( zGHWjwGXsD{&_K?>gxFCUaOeZSF&_dx0n$VXYgbpm2w;Ih82!U%pgBUo1(_rs+%YqR zFt7r^|8OP1NJBIbU&En~0|XHJ&cK9*=k<|$h;cGt84SVj3xxO>gFn}Cp@eJfF+2R| za9}(V8Q&8CmY;7&w%}z9WKj*meoN+c8RzF_mVJv_-fqYElFrU77!ae$fIOn=@C8cG z0KURh1mC^U#1QkhLC?)gV1|VO2ko;)<xvdAm8R!-f@L%JCLp;gUkA80Ph#6|%U z0t$R;KnBZ@fM`>rvig;UfC3=p!g~pX0w&)ACNd5p=javS2)_P-Dgh9GK#f{|`3W*W z5fk(X#7};Kp8$#c!2a3)&Edo-Ee{cg?b4m+=_jDTAR^FvDU4}N^o}N~?z=pIjDDcs zuIOBH7bg;5yWuAFWU7E&uA3c0KISrS>n}rXd8^s~Fw}+rWP4qSzulCCzy8e7@+&rt zm$EWvyvY43WG7jVe{;SWy5!lWs?P0gO*DgVI&7+q1!`;t&w_6K0H)tBW6|2SMlFrq zZ_?eO?=ux}h-k4an%Q4z~!S9iRG*~^LM zEOF_VIS|gesJO#4ShSvvO}|6pqR*b|w8wOSKx=xO_=D9@vOD)9s3(e!?qn*6L_AjN z=*DAu!~5Wr&(q(Z$GEB|*W7K1Y^Byq!`D^$A91=jR#umgQwq$gy~DI{m=TT7<-+|& zcTSLJBe-6i3?E$f3>?FBODkR9lCSq9g;`}HJn-KB}556tLAyai(oIC)zfvRwZ1}3-~Wf-25JqbY1es zyPm^O=*OZ8d1}+5xmNzdB6!l;ndza`5;LgRq1oG6}CiN(RcICV(((ji$$Es3GtYXoZ8$l`*e&>e-(bcye|Vs=%dc-A$HYQ zV&3%rn3FCiewQ9NodvT081xIoR0ys4nqhaeUpT&s6luqHdDyDj-mAvdt#d&l!cbGk9KSRQp z+dkA(Z$~)UNRJ1q@$wmY&LXQu@FDexu+2pzN|j_^uyJEOss!5ZIsdX}K5_5@S5`B5 z+;)^tfF4`%z3TcV93sgtzh#kw<&p+hp`WE`&%4@=oT`nH@N=(it=Z)x<#qilhXS!J z-Tq9h`~v@N%+Yvq+9sZ^XSzDhDsj;e%R^bdTj+6E!Ee+3l>=)o=Fs!2n<=f{o)ngH zJS>9^i_g*Aj)OM(F6&!c?^)PIDxqW1gm>}FJVJHRI5EE3PHKq9CoeD7)nQrbv{m}6`u)z90)?kMQ<2M^4w|ppqRw+C zfm21-KH{6W?z%svFhWh21=BL68{PI~Zub!%_=Qf5&dTf2?3(CHWjTP>M3$9jSzVVgdy!YocVB0;scS^IJVt zO$s>?)XzOCZMWxEGj?^y@VC%(Rk;2_2AB2DgF9tN{)}*)6}M838wC|}pweUOOxke* zpH?~_+ECUfQQ|(yl0sIsVY1#%ZGm!S(reIpj>>!ny+W%zcqDCeiL&oUPnK;YJ9(-_-X(cS@jRK(qORh> zRD!~fYM3ZpapqF;psH<+48H1>ITnSYe+A9kRvi8-W*)u>X|tcy4?Bv79x`slS{VYr zrpkg^p}+BRdsT7J5VrmkZXC(+(0((KPb|#neqF<)knNzov{mGVZ-i67;7BAP1Rx>kF%iNo9DwUGS!mi}r&(wyOY5pI1YbbclGmdb+y zb|Y!`9IMiAPnUF`W}K5w-n~C;;A5WJ?2`&xJ3+5^pdke;?{aBJ=s0CusH~8dNzc!n z@ln=zo+(_~F=_gM*W#!sbkNqhM*3nWQ17hMP`6r+A#3 z*Lo@dEmt_i8Fu061E_+Z$V4@xidlokZ_WjJYkl;U`#!9&DOK*&X`UZ?ZIQka754PX zmc6DYo1(k(D?${GX^3o%;jhEHNLIzseynQ#wM1Wfgxnclv(vc_R$#GAEBd)Z?jGg5 z(nhH_0X^m`D(xJOb!q-YF20^kf}V_bhPWmLE|YB6;O(uBF8A6; z%-oywgXBrEVwPQQ+>JD&#((kzylzL|IrOEsAu+x4S$3I0S}$H@Q$j!W!^2YfNtemz znb`QUc$@3K*A;7t@Z8uNh)73iK@ml~@^{=F8)2i3G_c>FYC)M@OPEwuN8qpF3Zrtd zne2@DXmp%QE$Jc~R~ow3E#V}c3RlxVu1MYT7--G({W7)4iqyJe#c;KWZTXJ+~qNI2b9BxdOj@(ikNbO0pp zfs=<=xH(&6b31Ur(;=N}O}*fJxYS%0O1(X34Cb?j!KmAG$vFQsx+77=;JeRsv&!l#DqY!eUJKyu%j__{5_ z*Tn(QQ93^g9`J{nS^eJM#kakIyv^5}{phDoQFYj6^kipyeR_q8KT9(+3{7mWyB~$u zHSmg(wNvBwFclRbROOcx&Qs6D;ib^gyrSWrxzc}0Ij)<4|Kwv#cwNi;4hNyit8FKh zS(VhGf&PF2>c*@7Uulrx|JK8)csiI8(90WHDZAK0(aRAqGW-_<#VnniT?jZi{!bz# zU}k6G{Qr%CH`tqY*y4}5`it?{G(5ig0f+-hwErScDAML3yb4MaM_@&%NK!ezUbMxN zaqx`cD+!`O(b%$iS6N-vU0)nZWLbnDZHrLn4%(3^kJ{0I)U?g2y!W95kDcp(( zaR2*lOVvdle2Vi0J-P27c)w2&Ggzh4_t zC0GC+;o=ewWN#X!q#?dKQEieeASYA-n^sfh6_5XRtn3Jeh(*}C2l4T+Og}UZWjvs% zEch6E8$SHB`?lwgyM8_uc-Kv6tr{q{lVB^S8q#qQmSY6!xQWOa_8$ZSN=QT%BYP(y zx6bL3Dr_z_P-_`hbCjw&&Pd>+h6Sa|Zemew(hX(UL)WnMI?TrT#7BJ!E{Lw9E=4dV zr;DhYsv=I&Jf_k~ol>Tv0m)T(t!_&9r`#sAv>KTSC5g%%mN+76YAo*a;+TrYU?-ut zGU%?N0Iq9@w*|XtdOs;{vBtK_q5Lw;#>liQOY@6rv~FTbRnHxT^PkjLTw{*QDk5_g zl=~OzcJYG+86H2{qlEX?;dvSH_Q`y`%8MJ#=YOynJz5!&s7&WykMLcOZK5z>HTk>kFxyuTXMA56fg8(+|{(; zpTW0i4q;OG!l)RtV65y1&if0wKu9~+kUtYvY~VTOn+C-imb=jT(FCpHiPG183$w6iqv}>G^Zh#P;mGT%HiO{3SL2q?~cOVgnFR}qIVR0VRhtIbg z%>e0N2QV)oT)*%z3r?u+{*WSKx2nErGpVH-!Wo{cf}PEI6i&5;tGLO=z4N)$X4nm> z33bzhf>4*znwvM|W>n40D^e3IrwJ%&N%0Ke7H}?J4ri>+hnHIp>4y0IKJWpFh2L(3 z=J7U!CdgKv&rW|WC8%c0(XS2D01u$CcjyJcU)q!N7*~M~(gH1%)#j)t^PNJsE1~|b z5DtEX^U}TrL*^Wu{U@@;tk`s;zl z#Whe;@by_k1o{X#D{FOJhlA-9Dt^cH5XiMZhn1?9&B)MH&oo3iiSmcjzdCkzBHg|% z^{gIsbu~NPP|%H2Tg-kZM3M$6qIZF=!CxSDj}$7Zc%NWV3E_XUjh6i2vl*LAY&g!l+`+RT z7U>9pvfEQUfM*ItOM<3srZ!Aj}CBPp*lc-(Z*QL6h##j*&+L5#P~ikr>tTq`s5M$Dhyd0JVTZJLs_VbQ6`B* zPZF53LR0rSVi4fzD7&@5bplwOshy<`_fn`8fnway$PmPfIRuRKcREH-5#vV^OBy~7 zN|yUr#v;z{7=znUl0)TRwzv^X4Y*uq?IA1)>Fa{QY^K{$Qu9)f$uwieMBNV(q|?c< zmL@Pts|G45jf5o5(VT{Zk110L6bSK(#o#c8mmw+xHnC`AIK zz(AY@Oqin*#~sHE@Ic`K!b7ZX;NE*xE=Rn!w)7V9})^P2QdZGqf(cDO;|M>r=@u^VLwxHvXs4%dEQ^!x` zPO(Y-e-E5gr;td+n$d{Giryz3Ax*Q=l#v-JfYX@mNMH}NqMY!2jfV?ZhuEOybot99 zgORgOXU!a>B~NomZ+zlXFg@t&ox+W=T!8LgRMeDoT!c&xgrd*plnG0GV`(O0QI}8B ze4VWsprcvLV0(X|f2MMPXMqPjZ>89S`%|>+Vv8+b)xF~+LM^QLy7nc91kKN;FnCZ6 zIi`)zGA*^o%GM2A99O&_0ge_mfo%brJh{$As{F$~5%@k4;Kl_480XFubQ|SIEedXf zc|miU=R|?7S&(uUuXTP;YAgw8MZZS`eMgD9231Pf<`2` z9(!SZ@MwQSLNn`eM<@1pfX)PVJQ-ZzWHxM{a>Vf)1%bQ`;_()nsGaYhd|dFbnbRAT z4&dXaGbIz_yrO8tQfKx9S2=hFIO54=!$icxIr^Fd=ZjgR4zacQtuJUAKHo1ad3!Tp zZq1G$`Na>z<;(NqhQ!tW z64sNu_^ZjCG~~Z@emNwK&&TE+cso!XGPr$l}j4zv3TLdD7}n zxL>aN-SmdT*wsHKh+pujtW- ze`|Y^)bITP{`~7tRu%MO@5mpub|1&6e_M{IBM|0;rCrSrjM16Wk%_32<-=mY~7i-QC^Y zHF$6*xVyVUa1I)rz`=t1J$&E)-}ma>zux`pR=uiMeRg)Xr?;oKduGq<^azf%$C}Q^ zM;YUnwNOq0QUM`sfd+H4TDL^lhL1lHMZ4xO?vtN1u!}V`lb(%Oo&))!?{pbIegP3O zW7{I;KQ!@WqOB8mK77__!uneF+1$%sp2mwP?FFe&sBA`)eXVF$W~IAWc1WO$ z3yNW*)B1wJCHFR~aDcQ~h{B~oNB%t{u0(HmPN7lIYUvhhDYn{OiwylrE$YC{Dy&N6 z3uH&UGUg@dQw_5pU|GZ;hpLg2PY3U>lOxXyY$_gnid%jEoP&BI_rcxCStybGog~Qn z;c-uW#0M*wnB%&$SrL0Hv^=?mwUr%iP?YHRvuQdZOI$A%cmW&xh1qQ>Rj6?DZq{U} zgO;!=r<1aWZVN^M4>cR4xtlV_Pao!ipXD_0T|lzIB+Je z?>N#jP~UR&G7YKFoE=HDiC3=&TD_@$7m_=o3o3%Y9`0+f(F=SM#VA#|Hi^a4+9=|@ zwS~*oK^5GX+c*Js-*eOfKmX)`^IMzA`$dQS&y|F5#&{3SFnjWM{7jhH zqaHp`33B7u&1YfVQv$-YRhU~FpQc?U9$3R8sG_aVya@fe+`F)+lbmlbs53TiPf&fu z7RXE%m;fA_Gd48TjU$xjgn=JGeJ{!awY=zXAL)t(i{KI$2Am?B2KE`de4+!j<@+lrA9-^n zcRVWBFHI$hoErNFIG=2+=u(U%FLw+)N%uV%GS5gqxJUhKCn@{?<|O^Ud=_(YvHa6* zO2)#*^ly7dgHxqrGn!C`PA>pXmn6K&w|Te_S6R_Pp$I`i3p~G7x=6KO2Xp)Oho|ep z+wmw83$8x{S;P@oF9H%ftg^jQC-t<)4Q>zlE8@ z`7wHv1S<*m17H+^NK2KN2#bYMIMTW*I8h69G^0GCG>IVdZypY%ro%TL`XDLZxX|(S zS~PBeG7=!6lsKSd#5`(XqK;C_6-bYuu9f#12*XpVYpHj>BQC)PNeX`vK7X$qm**yO z$D#bGAPd?E`e%a3_|`HjM!3PrOqtig?}*_!R*a-Cv&SroDGScj#$>*QtK{E=_vkN$ z&EuVF=%n*d+brK>EG0!W`)QZ_N z*hPHFBLpVEK7i=0%4ceJOZ1b`wuxJp83VE?MM# zVgwP&HxXsOh>sQl8p85)PZ)49tATJbe>!Nll$O81F(+2C+Tl_=q~1fvIcF50)W%RT zg5n*qscS29h?2XN=Y~tuY8(Ongpp>6Q4TZt;rBr$^D^ALkg zAq(FK$kS4m4AY=dDgMqDwpz<`LV-7qRS*g;C5cCBAd!7DAK;ytalU*HEh^r8g-MYO z$M9uCTCZW854Q!gVj;`C$_#8Qk?9=q)$R7At*=e@`Q{GL{_y+!rg*Whjr95U-r;>x zsH?B<^D+D5N0={_J5$<#Yjjey4c{)uhyBIbq5YJTyQY1{s^Xugr&FP>FK&rbPo0Ol znm@g+y!gGn;%9L=k37}Y8e;|ceB3>_e+QrXu3Rz4UU5|j*w*jG`9Y@FJ%PV4KX zqOUjUwIE&Yy!~^j+c9Q>%h7gbfotXr?lnnSr*lbXYfl2Yy15l6x$@E7p8uXoxE7~b zz~-5&jT)d%PEnnpzyTT-dY3yUE0)WL&ZyK#FxO<{!x;YrN-o1om+uS^fXCv!Ilz%a zohaAtBm9Kd1BTg%5A8jMLZwjHOTNURD%8#i6;rzd?X9S z^LlAkPge5UXenVR3&B&XR;(|J_nK>IJD!i=dZ%Wnha?5uQ!N(Dhjv|UgdW1@0oJb$ zY*xl7orxJ}=kufzr z0})1?7&UwBvIXsO$z+ZNV=2k{Jr@P*!#+xH>9@d*87^)>9cyzd^cqsY~Y4L8lw^8v0tr1C5{;TaXv~nK= z7CFmc_df0SY$_PJ`ta@y5f&782Wu`$Ls<7 zxA9-jjs%Xb1Z^BK`lqOC%#Ow1EVokqk0w@_ZH@vezc;M^AWmoma-}mLNrRY;BGKJ1 zoT_8KeUes!tWr@fUIaVu4cnUGKUPvcYomHQJKkYceY{6YMBxINW&l~|jv@t?pN2mJ>$nr7^jmCX@(G zWLL&a#%Ikl2&C3;iDogqmo+oDNSKbH9d(?Cn00K6%De?kCp$9RP0n;q`!k>H+D+@b zF!J3CcRMr*tBi269wf-zsy+@fYH^O=Sts4(+dSf^<+9+X2BPo5pZxiCT6E}iHu2+z zBz3U6^~j8bI#W?VBMNtmcQTX5b?qK4`-1WFEZdDK&BIq8ugA+v0w3>-MSc*1 ztd#$iPi}I7ktq*@xU&tXg?K3}Ndx6PfC3T|LQgun&he5}nR*pyCZ26S;%JRVjPWYo zZ*h;dWB~B?Dn3KkRR%{18K~S4N?2U@@dN6iAB{>RY?g=kWK}zjq80?NZ7eh(@8^&JPSRr!1&%&He znQsha4k)7qm^PKhGRqXE5g=TqRAoOuU5bS4+Iv!e7|OfgHXh0|G^qH^8+5~;RZzx9 z(y%?arr)~UuO56HGdqtUW}R8{s{%E4nZi(iv5_y|7!nk^!@7^&F4zMSV(R(!xLNLg zJh3e7EH{er*;#uye{AI#&=_d|EF1&Z6IzVDj+zqzboC$EJy$H!quMlEn#`3goUJvI z4)bPB@HL&RBN_^m#u>IXhir%ED)G}bv5(VhT9l_J|B7bT)L1H(PYje!02^zQ-OY0s z&Iwr>Gza%oL>`Q-Y?SK_iw;yoJooN0OB#0bT_&)m8?3vm%otdU5r^ynbwn4}4}-ay zvF;DSirVS?9Rquy(Q8BMRt|3$nURLyvyK6OXI&_zo~tZ=U{j`izURMG|1n%UU1cC0 z=U5HPvQ-38tmAui`*+RGx)q5J{f5&PJq*rYhw|oO&a9Nn;18A?NwasB>ovM7rR{}u z!gx*p@x&T(tJVz~au80)X_m7VxsjD0RirAVYqk!%vsgQwmA=0q3eI6s{40M47x%x{ zuw!OoWBbpR9UB`f$G_|Fh}M#>qHOxsK2`N&n;+I^&omwm1vdG*F$DeEelu`~7!UUA zpI(9&UsGY{D@zw@P<~%dKV{^%Z$>QmYflCzPjAG=DTn}Ky#4uKdxSn|47&{v4HKg; z69s3MKF@+AV`%+lkHen4LU0w zbC{pJSBhPA7)T(xcZsnU6aQxTATJ@EeQ8en%fE)1$k-?<`uvAH6Gu`0R^feO>_>P* zLvD-HRL%t+)N@ud@<2VJgC0MX3+7w?Es*`7DfxrKi30HjFx zb%hS~qnyPaZ0~X;9O`wr8j1O^G#;iELrBeuh#A8~v=8$9E&(JRh*878@yPXr7wr0b zeBk}{yF8+nmthZ;Sv@^SuhruASKc=FB3n&jXog0<#wn|?p$t9IdC5fx(u_YOdt_K_> z`sHeVBH{n|q*)2erkcsnguwU_w@5g%g2e+$`KzmpS+jJwey?w}46^%gVh;Lif}lR9 z#x$sgUoV!Me=v#Vs9>rNtQv-{-=6mL%9>e!`ux5Xn~9Nq3su@Q0l};Aw-o~hY_dHM z!2I4pn*y9u*T8CZ2ATh)@>E>R;nY|J>(PTiudTZd-;ec6mFD&b<0QTD?S7VxjI|Qw+(KC(`Lw(6|*?nD>)3uM10IE{+ePU=PXRh;CAWg zC@E*N0}CUw{&SNb-)g??5ROzDZG4R{0B3Y;x`f!QiQvwZx2ml9N5<8m`# z@6%~sywy1`0<*DCv6&sl0GQu{kQF{84dk7e$!46+rgH8yv3wLjD=CWMU1O> zw3LE%7gu(mYs^Y(81@9#B2hmR%Rs{kWK93^S@gIZU$ZE1b1C1}DCDq>b*J|jWvx}S z9$8V#RV9lgTx(pTS}lLi9=N|m47_~Y42Yq)6; z>7oZXk)r20IS2+gT?kw!b(%ACHC?BT&yLqJTj2;oZH3Pi>Ma}025G}Z)2EQpR1}Da z^PGZl6o_0!PJ&nPTb)&#O!TAjwt-Pm@vlXs zO(zz$B~jlL@37WLl9(NkGV(O*SVTeURjurFhC50`Z1D!gdpX~*vXzHM*9dJ)4;HkY z^rJF*gGC32TPmi9@wl%Lqk8eUvEM`&ER}pYjn{6VC^|nu zj*{h=Ue?MU+~Wu|#x|x6R86ooI?M1Ri{9xxi6}(x2Y)HIsg#*S zy`HzrPO3yB27sxhboJj1K*uZpBo|e9EWxMPmk^^c+|l}NW)zh{M+_08Wkz`dI~uF0 z+VLjjFHIy!n?|M89qK^{B9cW1e_(G6<24)-irZsCO6SVScn3rgx~*e)+`CNC5M7|n zLLTcM(Y~+5bk5lZNa`i~swboAoR>*$iM{cPbgI%mbFb$yo}>(% zCW`C_nJ5SlDsoDxR9OoVJJqbblX;f5YSsHwkPXDNdB}!X=>qJAJ6JQvnN6*~XnQU4 zympATpE7SMf0-3nJ3 z_gJxNWe$`FT&!y5(ybppQ?ydy%1S;>xQPFg#PXcjK2G|N(}Z=;yXKs_`m=*i z{Ye}H2oVyJm@b9I+NybVBEQXzJz{0nOVLs4AXMFR74J!5!~4qTOCTvJK0b}Kd=&!k zL!M?TFSe|vTReXND?N!i80;YpSQ1iLKjNRW6uLhF9$6ZRnL5d8MAod`>wy(Tlz?@zV}3t>#a$>BQ>3#Jo4fo$Vk+*1==Opx)I&oe zLr0$DYw$yo5A)X0Cs^_%_&p80vQY;_R06&8UkdrJf0B!kgsZ4X-T=0b?-xe=?yoL3 zx_s^+y;b@aUHqU2GhvS|w6ahY@M2_1sEO5bsx+(1iF306o8f~f?A^PctDb?x14?cE z#i1rUZASJiztuB_y+*c#?C8N4tu8RRguQKq^4HETY*PpakcT1i>iL&kdg>u&6w5Z;FG$EwqC z1)#^_$4jUmM3-`W$%G}-K$+$pOAm(2`|Hq$E^cs+6muCP zeEf4g=Np(km*FPlD;3gKp3udhLX~Cy$v;CTAS$n z9Q?CYU5yqKEYTyr+Ny3t3$whmX=^L{#Ca?KxnBPaH(3oqKq8!j-iL{gUO`E|r<@E6 zna}Dy2GhioD_RZ;G7i9^MlUXJ2Ll$%Sq!}qe^-U=R$l26kMs6nMezmI2aA%A;E`6s zqyARCRHL9=l|g~YT2^e1n9o|_ZytW;o&ECxy@ZTf#4QYP=$-$`NRF5lF0_Zb1njWh*wM6E)6!(KWF9^;{ zRM4$S%z9sW;tXZFlQR(0!P^#x#_i;KO|RVcy|a;`d=TPs@pLpKpQL023b9Gl zv>&a+y~E^B;^hT!-%wTA(L`TS+0jVf5ij_iXMUO?ie`S=HWE+%!j&_#>_{irfzL&e zeIK%;{kN$g!zX1&dOcYs$LZdfAA7ZdPjbeYRAY%dW56LHv=VAdLqp@)Hx|;=p*RW? z-Utd`*y=#+jG!Qm6AY&?v5ByjV*{ji z9*uBLnI-p4y?T3;_p6#@z^t=`OAAqHXzDo1w9ppo z#!udUTGigExoli)EOh2YXj)w34jH4-Uu|A6HA3SJFdCt$8pH~rJEjJ?PGNT_@PeVK zp4dCkAg_R#q9fOpwa#3JFi-#ncL6UeaJs4RmKts&(b{0Ecx!Mq;Z3KcS?FH#O&7b86ozzr7if;Y@g9C!~EBh?QfY+J>}z(n6cg)KIyn!HXwOSpSI`QgqF#Uta2t;?968#EiZ7gj4UR4ywq4OJgay!c(9<8i= zgeIQb!Z9soYv_!zqUfY=*?HwrN?EF+tM5}Bw>-3UTclP`ex(2}#7Yc*&)=2(N=i~4 z3D(_xdfa>-^?1IwG3N6nz8pRE!qJ{QNbyOzxp=rE@e|0hq}{8j-+E}Q08ZeoE#z;u zb*Y(!Ts-Z5Dn@)h!(Fe#UA;*mo{%FPT>cVJbD%)8`9ECE>sutd~uF4#7SL5Gf=(k zWHVHa!X0~l&5!|3&oR0%H0+CpAe_6qI7#!^7-wK>Z2{VN(jU~$SWe$t&Stdxu^G;4 z-IPxMhQs^orxu1kNmHHAXWO#bQ#0mL3~^L~UdJCQ>2AmeE7F7im}ITTB3*v6v6Y^q zU6~X1cR)bM+`m^kT!8yF6tZo266-_fhYw=f z&l3>Yixkeo*KE@STGJb*Zv!?6AB8I0-NJ$svpBqWVuxyfmo7u9Q50ct&slE%p)@}V66>U?Cid51 zfo!(;vopb3^w*}wq>jFqnovP`d{rE8YAy`67mKM4ZrQWL4Z?UY1pPUfL(nVQy)Ro~ zAF>%=iunvWGh6R}R)yMoHgC>^y78qZ{OWqSyV-cYIzoTB_jpG6T@3NJJ^dLII7ast{X9fLs#~j^dHklezrkb`Bs5kQIQ$&;P2?*BPM9Y>=JM|Cb*BPd_IM z>pw^TvM_V~XJ;5E+dsUV|HdTHq-0IYmCqQ#8&7oCH2~om@HiMgD%W~Fjk?f0TaaW& z7%q^JJf8Iaw2kfoizj{!D}YPgWk18#2|ppo?4!{85sYB^@)~fhUf)Ocuy>|)a`}}T z;3&t8V9s?#oF2Fh(pYK)PV$PG!H>k!AFZqJ@{~(^lcqjqH$G{se|X|&-Si)u)&lenumF#434sEaFG(Ly65m2~&59dlOaO^_hh zo9uzUf_9y99PLjp`XHC1V~h26oD>cmrC?;o=0UBv!pP7OD;F?<9P>#~K^7SPi`pCh z?a_E5a7|eO;l!XLr#VNlrf@6WfXNHUa_KIaWl6+dF z1ixcE!*F}U8ziH-Q**gsshYA$_Q|Pw*yh{Xhc*#NYgJ9)kPOIOKVjIkR4#xc%wiC@ zgj0iGgKuplyx9ZmAg2}E-jCja2ZaKK0F@sd#Y-gXDbDo=Nr(TS z*w_VGI0c!xIM}#^S%f%5_{siz5=c%`#x|yq7b7bh7uUbr%S{Cm|3Rg$Gjz^%+L7SS zT373k^|;QOnFv6eHfilEGD54|TyQf65l6(EV`c+# z{%^H#hJb(oIWjc8qlZV&iwRF3&JTaqZ=a{0vbm~COAlWLOD)PJlpDGQNYSE|-47e- zds4yG;N(p%so|Jm8v>J5DxQyR`doyfwT87vA&z>L;AU{zChzT67g3jaJANojYbp5W7$l?G3+u*jmp_et?sqK8j`LbNzZ>_-d9mAjgx(sxJgs3%|XRu-VEz9 zx;`d@cM`B>IKQ-G1+wqst5$_jq;B#rF|K^zv2cSz8$}z9!6OOitG%f03ppQ@S6}Vo zq6B(qxv0AQWa9rR4x&@n;_nl`m0S`qN`NlOSq^Cx3GQHBOe_O3- zt#!!FuTF3SJsZDYsNwvrnPB699TLgN-dG+SNgpQ207Ttad?wYXfwOx-q%+Jh%z@V# zq*_Z{OWUz{CW-@G#P1AttxXM-Z)8nUykbr8_U9Jh|Fj>?&XUkUnxLIf^001nN@H|m z+>kr6J{8ZG@}0F~WIfi1(TEOJ`r4x^xM(mapd&R81Z8j%vV zT0VUOp{jdnxwdbRMQ*(e$5r?wfJ^8*Kh8ekfOtS!Ldr8!iBoQzz{r(?-uvU)SR)Fd zdC+O%0A-A3dF{hmt#hq1v-Doz6BWvcv>56A};lnYuSO(c#B)?jTBppVSMXJrF< z3ZQoY*0ZJN`=?ZO?#zFi7P(b=|GsCw<@=HC)`zZcYjERp?=jnQV+cy`@5o+UpF4gc zyP>u^rD^As_7u497y(&gb^t(@^c~?#mLeU$7dPM&D!b5&G+r>Is-NGbs(5>mC6xFg z6v@3H=ycO@C6zvgCdv8|ZfQAd&|Q8a`p);n<5ndtY%7I9Y)_PjZW4CFNtm}k;eX(C zL3Y356;{~@m6yU0aG)nicE7+9X43$ZCsqMNyx-^X)0E!|Zf!R(`HGzS{77lyY2~({ zOwk#9vpsL})1Kc7-g~c)Ca2A73EE>cRJ)q+x|?4uy%bxwU-`NhnhW|tvB5*9-5x`x zM?JM91@(o%HY4Q14w^sM(+;St>BE86@5mHgo`a&j?@2ThU3OO!0o=fPI=%Jf$h=LvMXqBh9 zS()CNdULvZ>G|sU=6E*4?kirM;BG0Te13}}p(h6u`2Me)mq?W+?I059^sXsAoi%NJ zw8!NBhd5i9cKmkyKly@AnvwzJr^=;1V0*3I%<=#@LnbuLIDMQbg{!s~%%O?ESUvXf zP-P}g1zDOUXEM1 z#y+&L`Aw2Ac76I~m%_so{{E}$FZ3wr-Q;0c8}GuDv*(4LR?E~@GhrlKM_BDpWeN@> z$L#rzT1V>i*g4JbIPL&y_0l>pk_{ttdj1^lu=G9Dwmq25S*52w*o$>&>FxWNyl0~h zmMl7aK>#H&WQsu0&pL*;Crd;!ENaO7J@3B-_enbd4uQTsl-Hn_}#Grg#AwW~%n z?n8)tre?q4uclbHye>I^mTgb;%5}fuqxpy>Y4KsU>HxW{{}aav^4c+7PMh~pNJl+c zbdv3`XLhOYLp~mL*zPHpQJC_H6<(p!+0<6Edo_$n(XH>3g^@}`LjaYY z_a_YmmBM`GYJ8QVL*Fh^+-ekJb=R1MfcZT$J}bD$(P@?HaYAcx^DXfV6Kw8#xN>4K zoXC7_y>PB&SRDU+#cIaF7T2wMSi3j$PoiSKXo*5G?cPszi*RMmu z9}Q!^HR698^4kOv9C!>^Q^!GcT>rWDbB#7GWFutI#8*O*DyHttmdp0Q=D;Qf`t^ok zOPQj}Eu9Q|f>+!m^!`L~4t<*BXKP2&%7ROmFvlwBHPqSY2s0blebg@022|ULz(k*e z>@Bt;LhNZ?gh@i5^!;Dt&Ef2=L#qg%66)MDXJScWk%iy>T*G&9a@}(ha}{&tq$}*Y z)oCwN`b5x%{~+)bJB9W8d_6n@UJViXfwgG_mQ5{#{?PUMS(&@p8)OpPBm_Zw7 ziLPcIG>$eN%r=Tn!&cTdp7=Jm>h$kxy5r%2+xW~RNa3ej@;|{RTl!Ppzpo1}*RsO` zlSGDW_un?TMDh?iHLT@ph&W}qz5-GK>lDv5Pb&{==XQJKE}<>)Iq`Ys$a>AjD*)0a zu}FY4bLN&;6$7%vr^kD;wdA z$3yLkLYX6TA|m}gMcy~-_}G+qf%d6>D0O-qQF>_O!R}}8#zSNEq3MG}s_~M$71R*M z^x?~cl;!#?)LJxgwtmq?xgZ}z=&{;x!*n}bq60*aK>6Yh0 z7}|u(2vW2onCylWOGkkB6`Rdg)NS~C+~&9$U2oRfNV~VdKI~?s#b2LR{nG7_ZTg6t zk#BzS^ZJD{!N>k$=JhW=L&*}t>XUSXui8Xy4|eVD%kKZUpF1Pd>ocM(gPAAC?m6d}fPmYe$`|951v$GsT}vON6%SOReDVogUvw~e87 zTSX&4(=-*nk;sy8_KGMK`J$U&%etxY84t&=W7y+ef8fJ=H6)G$3r)}!lG zcfpeEzB9AUgKz0)1!vKD)iXJNiT9lcsg=y{hiowu#`eZ4)s^E)>zjq=PPvtpa@RnH zQx8V4tfAqHd|}P`Mp{olu08aFM?=@a+%#?;)e=V4_IF?edE=!_fcE)4+tT}rr}IMo z^ua$$T8CN$D{dcjGGz@-7Y53Z&B4X3Zdc}zff?TChXw=>30;w@DKkrpUGJ)Z#pi1R z@2e^c?2jJ5tE$f4az3-^XiIKqzc{qFW(_`&YE79~S})eebU7=TKk7cO5h@1B3~Z1a zoX#g~DuHDL{6aB&ncd+y0L59KtwskIysb2c_?@k!hO$2zygZ}2Nu)-sX}p}8vc8-y z`iRz2$FqMc4>yvgwEUosIg<8uLHPdz)bltg{^iNzcWdWNN=st(qhSrPg-^8$-x^}d zosB9e{>La;Rr3#?ABJc9WibV$AKA|T%?P6`CT17Q#mgkO(vv`19%lT1{Tg+2(syuj WgY&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/_docs_/_static/alabaster.css b/_docs_/_static/alabaster.css new file mode 100644 index 0000000..2c14d17 --- /dev/null +++ b/_docs_/_static/alabaster.css @@ -0,0 +1,607 @@ + + + + + + + + + + + + + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: auto; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: auto; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: ; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #FCC; + border: 1px solid #FAA; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: white; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: white; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} \ No newline at end of file diff --git a/_docs_/_static/basic.css b/_docs_/_static/basic.css new file mode 100644 index 0000000..607b5f5 --- /dev/null +++ b/_docs_/_static/basic.css @@ -0,0 +1,648 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_docs_/_static/comment-bright.png b/_docs_/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..15e27edb12ac25701ac0ac21b97b52bb4e45415e GIT binary patch literal 756 zcmVgfIX78 z$8Pzv({A~p%??+>KickCb#0FM1rYN=mBmQ&Nwp<#JXUhU;{|)}%&s>suq6lXw*~s{ zvHx}3C%<;wE5CH!BR{p5@ml9ws}y)=QN-kL2?#`S5d*6j zk`h<}j1>tD$b?4D^N9w}-k)bxXxFg>+#kme^xx#qg6FI-%iv2U{0h(Y)cs%5a|m%Pn_K3X_bDJ>EH#(Fb73Z zfUt2Q3B>N+ot3qb*DqbTZpFIn4a!#_R-}{?-~Hs=xSS6p&$sZ-k1zDdtqU`Y@`#qL z&zv-~)Q#JCU(dI)Hf;$CEnK=6CK50}q7~wdbI->?E07bJ0R;!GSQTs5Am`#;*WHjvHRvY?&$Lm-vq1a_BzocI^ULXV!lbMd%|^B#fY;XX)n<&R^L z=84u1e_3ziq;Hz-*k5~zwY3*oDKt0;bM@M@@89;@m*4RFgvvM_4;5LB!@OB@^WbVT zjl{t;a8_>od-~P4 m{5|DvB&z#xT;*OnJqG}gk~_7HcNkCr0000W zanA~u9RIXo;n7c96&U)YLgs-FGlx~*_c{Jgvesu1E5(8YEf&5wF=YFPcRe@1=MJmi zag(L*xc2r0(slpcN!vC5CUju;vHJkHc*&70_n2OZsK%O~A=!+YIw z7zLLl7~Z+~RgWOQ=MI6$#0pvpu$Q43 zP@36QAmu6!_9NPM?o<1_!+stoVRRZbW9#SPe!n;#A_6m8f}|xN1;H{`0RoXQ2LM47 zt(g;iZ6|pCb@h2xk&(}S3=EVBUO0e90m2Lp5CB<(SPIaB;n4))3JB87Or#XPOPcum z?<^(g+m9}VNn4Y&B`g8h{t_$+RB1%HKRY6fjtd-<7&EsU;vs0GM(Lmbhi%Gwcfs0FTF}T zL{_M6Go&E0Eg8FuB*(Yn+Z*RVTBE@10eIOb3El^MhO`GabDll(V0&FlJi2k^;q8af zkENdk2}x2)_KVp`5OAwXZM;dG0?M-S)xE1IKDi6BY@5%Or?#aZ9$gcX)dPZ&wA1a< z$rFXHPn|TBf`e?>Are8sKtKrKcjF$i^lp!zkL?C|y^vlHr1HXeVJd;1I~g&Ob-q)& z(fn7s-KI}G{wnKzg_U5G(V%bX6uk zIa+<@>rdmZYd!9Y=C0cuchrbIjuRB_Wq{-RXlic?flu1*_ux}x%(HDH&nT`k^xCeC ziHi1!ChH*sQ6|UqJpTTzX$aw8e(UfcS^f;6yBWd+(1-70zU(rtxtqR%j z-lsH|CKQJXqD{+F7V0OTv8@{~(wp(`oIP^ZykMWgR>&|RsklFMCnOo&Bd{le} zV5F6424Qzl;o2G%oVvmHgRDP9!=rK8fy^!yV8y*4p=??uIRrrr0?>O!(z*g5AvL2!4z0{sq%vhG*Po}`a<6%kTK5TNhtC8}rXNu&h^QH4A&Sk~Autm*s~45(H7+0bi^MraaRVzr05hQ3iK?j` zR#U@^i0WhkIHTg29u~|ypU?sXCQEQgXfObPW;+0YAF;|5XyaMAEM0sQ@4-xCZe=0e z7r$ofiAxn@O5#RodD8rh5D@nKQ;?lcf@tg4o+Wp44aMl~c47azN_(im0N)7OqdPBC zGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjfjZ7Z_ literal 0 HcmV?d00001 diff --git a/_docs_/_static/custom.css b/_docs_/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/_docs_/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/_docs_/_static/doctools.js b/_docs_/_static/doctools.js new file mode 100644 index 0000000..0c15c00 --- /dev/null +++ b/_docs_/_static/doctools.js @@ -0,0 +1,311 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/_docs_/_static/down-pressed.png b/_docs_/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5756c8cad8854722893dc70b9eb4bb0400343a39 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln;`PZ^+1>KjR?B@S0W7 z%OS_REiHONoJ6{+Ks@6k3590|7k9F+ddB6!zw3#&!aw#S`x}3V3&=A(a#84O-&F7T z^k3tZB;&iR9siw0|F|E|DAL<8r-F4!1H-;1{e*~yAKZN5f0|Ei6yUmR#Is)EM(Po_ zi`qJR6|P<~+)N+kSDgL7AjdIC_!O7Q?eGb+L+qOjm{~LLinM4NHn7U%HcK%uoMYO5 VJ~8zD2B3o(JYD@<);T3K0RV0%P>BEl literal 0 HcmV?d00001 diff --git a/_docs_/_static/down.png b/_docs_/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3bdad2ceffae91cee61b32f3295f9bbe646e48 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6CVIL!hEy=F?b*7pIY7kW{q%Rg zx!yQ<9v8bmJwa`TQk7YSw}WVQ()mRdQ;TC;* literal 0 HcmV?d00001 diff --git a/_docs_/_static/file.png b/_docs_/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_docs_/_static/jquery.js b/_docs_/_static/jquery.js new file mode 100644 index 0000000..ba171ca --- /dev/null +++ b/_docs_/_static/jquery.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-09-03T00:14Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. + + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_docs_/index.html b/_docs_/index.html new file mode 100644 index 0000000..8540ecc --- /dev/null +++ b/_docs_/index.html @@ -0,0 +1,366 @@ + + + + + + + Welcome to state_machine’s documentation! — state_machine documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Welcome to state_machine’s documentation!¶

+
+

state_machine (State Machine)¶

+

Author:

+ +

Description:

+
+
This Module helps implementing state machines.
+

Submodules:

+ +

Unittest:

+
+
See also the unittest documentation.
+

Module Documentation:

+
+
+class state_machine.state_machine(default_state, log_lvl, **kwargs)¶
+
+++ + + + +
Parameters:
    +
  • default_state – The default state which is set on initialisation.
  • +
  • log_lvl – The log level, this Module logs to (see Loging-Levels of Module logging)
  • +
+
+
+

Note

+

Additional keyword parameters well be stored as varibles of the instance (e.g. to give variables or methods for transition condition calculation).

+
+

A state machine class can be created by deriving it from this class. The transitions are defined by overriding the variable TRANSITIONS. +This Variable is a dictionary, where the key is the start-state and the content is a tuple or list of transitions. Each transition is a tuple or list +including the following information: (condition-method (str), transition-time (number), target_state (str)).

+
+

Note

+

The condition-method needs to be implemented as part of the new class.

+
+
+

Note

+

It is usefull to define the states as variables of this class.

+
+

Example:

+
#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+import logging
+import os
+import sys
+
+import report
+import state_machine
+
+logger = logging.getLogger('__example__')
+report.consoleLoggingConfigure(loggers=[state_machine.logger_name, '__example__', ], level='DEBUG')
+
+
+class trafic_lights(state_machine.state_machine):
+    LOG_PREFIX = 'TraficLights:'
+
+    STATE_RED = 'state_red'
+    STATE_GREEN = 'state_green'
+
+    CONDITION_TRUE = 'condition_true'
+    CONDITION_PEDASTRIAN_REQUEST = 'condition_pedastrian_request'
+
+    TRANSITIONS = {
+        STATE_RED: (
+            (CONDITION_PEDASTRIAN_REQUEST, 1, STATE_GREEN),
+        ),
+        STATE_GREEN: (
+            (CONDITION_TRUE, 3, STATE_RED),
+        )
+    }
+
+    def condition_true(self):
+        return True
+
+    def set_padestrian_request(self):
+        logger.log(self.__log_lvl__, '%s Pedestrian gave state change request.', self.LOG_PREFIX)
+        self.pedastrian_request = True
+
+    def condition_pedastrian_request(self):
+        return self.pedastrian_request
+
+
+sm = trafic_lights(trafic_lights.STATE_RED, logging.INFO, pedastrian_request=False)
+sm.register_state_change_callback(sm.STATE_GREEN, sm.CONDITION_PEDASTRIAN_REQUEST, logger.info, 'Callback information: Traffic light had been changed to green caused by pedastrian request')
+while not sm.previous_state_was(sm.STATE_GREEN):
+    if sm.this_state_is(sm.STATE_RED) and sm.this_state_duration() > 0.2 and not sm.condition_pedastrian_request():
+        sm.set_padestrian_request()
+    sm.work()
+
+
+
2019-12-26 13:40:44,154: INFO    - TraficLights: State change ('__init__'): None -> 'state_red'
+2019-12-26 13:40:44,354: INFO    - TraficLights: Pedestrian gave state change request.
+2019-12-26 13:40:45,354: INFO    - TraficLights: State change ('condition_pedastrian_request'): 'state_red' -> 'state_green'
+2019-12-26 13:40:45,354: INFO    - Callback information: Traffic light had been changed to green caused by pedastrian request
+2019-12-26 13:40:48,355: INFO    - TraficLights: State change ('condition_true'): 'state_green' -> 'state_red'
+
+
+
+
+last_transition_condition()¶
+
+++ + + + + + +
Returns:The last transition condition.
Return type:str
+

This method returns the last transition condition.

+
+ +
+
+last_transition_condition_was(condition)¶
+
+++ + + + + + + + +
Parameters:condition (str) – The condition to be checked
Returns:True if the given condition was the last transition condition, else False.
Return type:bool
+

This methods returns the boolean information if the last transition condition is equivalent to the given condition.

+
+ +
+
+previous_state()¶
+
+++ + + + + + +
Returns:The previous state.
Return type:str
+

This method returns the previous state of the state machine.

+
+ +
+
+previous_state_duration()¶
+
+++ + + + + + +
Returns:The time how long the previous state was active.
Return type:float
+

This method returns the time how long the previous state was active.

+
+ +
+
+previous_state_was(state)¶
+
+++ + + + + + + + +
Parameters:state (str) – The state to be checked
Returns:True if the given state was previously active, else False.
Return type:bool
+

This methods returns the boolean information if the state machine was previously in the given state.

+
+ +
+
+register_state_change_callback(state, condition, callback, *args, **kwargs)¶
+
+++ + + + +
Parameters:
    +
  • state (str) – The target state. The callback will be executed, if the state machine changes to this state. None means all states.
  • +
  • condition (str) – The transition condition. The callback will be executed, if this condition is responsible for the state change. None means all conditions.
  • +
  • callback – The callback to be executed.
  • +
+
+
+

Note

+

Additional arguments and keyword parameters are supported. These arguments and parameters will be used as arguments and parameters for the callback execution.

+
+

This methods allows to register callbacks which will be executed on state changes.

+
+ +
+
+this_state()¶
+
+++ + + + +
Returns:The current state.
+

This method returns the current state of the state machine.

+
+ +
+
+this_state_duration()¶
+
+++ + + + + + +
Returns:The time how long the current state is active.
Return type:float
+

This method returns the time how long the current state is active.

+
+ +
+
+this_state_is(state)¶
+
+++ + + + + + + + +
Parameters:state (str) – The state to be checked
Returns:True if the given state is currently active, else False.
Return type:bool
+

This methods returns the boolean information if the state machine is currently in the given state.

+
+ +
+
+work()¶
+

This Method needs to be executed cyclicly to enable the state machine.

+
+ +
+ +
+
+
+
+
+

Indices and tables¶

+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_docs_/objects.inv b/_docs_/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..af94c101908420f1431569e7183c8f5c0e9215fd GIT binary patch literal 383 zcmV-_0f7D^AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGk&bYXO5 zUu|JyXlZU`3L_v^WpZ8b#rNMXCQiPX<{x4c-pO#K~BRk5JmSn#h|iHM7O;G3nU~KEUl?M ziY**F@=Pe*agAP&laSg}O)CUa(v_|6|KHeOG7Ac+4z+cGpxWZiShOg7wBQvb0;eS%im=Gli13PgsC>?{zyL=lG8_kV?YKJ@*+9!Hh=v619$n(ho^n4DGm}_gmC&bE#t8!otpk#br%UZgx+*nEq^|rH~b1 zF&mFt@=&kgq-GyH9=FxmW}-ftCXQF~I(7sS;bQ#P=Ye6g4;=-`W!zQc-~44_zpqaR d1^HCIb(zhCN!!ar(Te${oIhhr)i+o7gZT0nt1|!q literal 0 HcmV?d00001 diff --git a/_docs_/py-modindex.html b/_docs_/py-modindex.html new file mode 100644 index 0000000..43fd244 --- /dev/null +++ b/_docs_/py-modindex.html @@ -0,0 +1,104 @@ + + + + + + + Python Module Index — state_machine documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ s +
+ + + + + + + +
 
+ s
+ state_machine +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_docs_/search.html b/_docs_/search.html new file mode 100644 index 0000000..82e830d --- /dev/null +++ b/_docs_/search.html @@ -0,0 +1,100 @@ + + + + + + + Search — state_machine documentation + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_docs_/searchindex.js b/_docs_/searchindex.js new file mode 100644 index 0000000..4cca051 --- /dev/null +++ b/_docs_/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["index"],envversion:52,filenames:["index.rst"],objects:{"":{state_machine:[0,0,0,"-"]},"state_machine.state_machine":{last_transition_condition:[0,2,1,""],last_transition_condition_was:[0,2,1,""],previous_state:[0,2,1,""],previous_state_duration:[0,2,1,""],previous_state_was:[0,2,1,""],register_state_change_callback:[0,2,1,""],this_state:[0,2,1,""],this_state_duration:[0,2,1,""],this_state_is:[0,2,1,""],work:[0,2,1,""]},state_machine:{state_machine:[0,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method"},terms:{"boolean":0,"class":0,"default":0,"float":0,"import":0,"long":0,"new":0,"return":0,"true":0,"while":0,The:0,These:0,__example__:0,__init__:0,__log_lvl__:0,activ:0,addit:0,alder:0,all:0,allow:0,also:0,arg:0,argument:0,author:0,been:0,bin:0,bool:0,calcul:0,callback:0,can:0,caus:0,chang:0,check:0,code:0,condit:0,condition_pedastrian_request:0,condition_tru:0,consoleloggingconfigur:0,content:0,creat:0,current:0,cyclicli:0,debug:0,def:0,default_st:0,defin:0,deriv:0,descript:0,dictionari:0,dirk:0,each:0,els:0,enabl:0,env:0,equival:0,exampl:0,execut:0,fals:0,follow:0,from:0,gave:0,getlogg:0,give:0,given:0,green:0,had:0,help:0,how:0,implement:0,includ:0,index:0,info:0,inform:0,initialis:0,instanc:0,kei:0,keyword:0,kwarg:0,last:0,last_transition_condit:0,last_transition_condition_wa:0,level:0,light:0,list:0,log:0,log_lvl:0,log_prefix:0,loge:0,logger:0,logger_nam:0,mean:0,method:0,mockeri:0,modul:0,mount:0,need:0,none:0,number:0,overrid:0,page:0,paramet:0,part:0,pedastrian:0,pedastrian_request:0,pedestrian:0,previou:0,previous:0,previous_st:0,previous_state_dur:0,previous_state_wa:0,python:0,regist:0,register_state_change_callback:0,report:0,request:0,respons:0,search:0,see:0,self:0,set:0,set_padestrian_request:0,start:0,state_green:0,state_r:0,store:0,str:0,submodul:0,sudo:0,support:0,sys:0,target:0,target_st:0,thi:0,this_stat:0,this_state_dur:0,this_state_i:0,time:0,traffic:0,trafic_light:0,traficlight:0,transit:0,tupl:0,type:0,unittest:0,used:0,useful:0,usr:0,utf:0,variabl:0,varibl:0,well:0,where:0,which:0,work:0},titles:["Welcome to state_machine\u2019s documentation!"],titleterms:{document:0,indic:0,machin:0,state:0,state_machin:0,tabl:0,welcom:0}}) \ No newline at end of file diff --git a/_testresults_/unittest.json b/_testresults_/unittest.json new file mode 100644 index 0000000..0350720 --- /dev/null +++ b/_testresults_/unittest.json @@ -0,0 +1,17279 @@ +{ + "coverage_information": [ + { + "branch_coverage": 100.0, + "filepath": "/user_data/data/dirk/prj/modules/state_machine/pylibs/state_machine", + "files": [ + { + "branch_coverage": 100.0, + "filepath": "/user_data/data/dirk/prj/modules/state_machine/pylibs/state_machine/__init__.py", + "fragments": [ + { + "coverage_state": "clean", + "end": 3, + "start": 1 + }, + { + "coverage_state": "covered", + "end": 4, + "start": 4 + }, + { + "coverage_state": "clean", + "end": 26, + "start": 5 + }, + { + "coverage_state": "covered", + "end": 27, + "start": 27 + }, + { + "coverage_state": "clean", + "end": 28, + "start": 28 + }, + { + "coverage_state": "covered", + "end": 30, + "start": 29 + }, + { + "coverage_state": "clean", + "end": 32, + "start": 31 + }, + { + "coverage_state": "covered", + "end": 34, + "start": 33 + }, + { + "coverage_state": "clean", + "end": 36, + "start": 35 + }, + { + "coverage_state": "covered", + "end": 37, + "start": 37 + }, + { + "coverage_state": "clean", + "end": 38, + "start": 38 + }, + { + "coverage_state": "covered", + "end": 39, + "start": 39 + }, + { + "coverage_state": "clean", + "end": 42, + "start": 40 + }, + { + "coverage_state": "covered", + "end": 43, + "start": 43 + }, + { + "coverage_state": "clean", + "end": 64, + "start": 44 + }, + { + "coverage_state": "covered", + "end": 66, + "start": 65 + }, + { + "coverage_state": "clean", + "end": 67, + "start": 67 + }, + { + "coverage_state": "covered", + "end": 76, + "start": 68 + }, + { + "coverage_state": "clean", + "end": 77, + "start": 77 + }, + { + "coverage_state": "covered", + "end": 78, + "start": 78 + }, + { + "coverage_state": "clean", + "end": 89, + "start": 79 + }, + { + "coverage_state": "covered", + "end": 94, + "start": 90 + }, + { + "coverage_state": "clean", + "end": 95, + "start": 95 + }, + { + "coverage_state": "covered", + "end": 96, + "start": 96 + }, + { + "coverage_state": "clean", + "end": 101, + "start": 97 + }, + { + "coverage_state": "covered", + "end": 102, + "start": 102 + }, + { + "coverage_state": "clean", + "end": 103, + "start": 103 + }, + { + "coverage_state": "covered", + "end": 104, + "start": 104 + }, + { + "coverage_state": "clean", + "end": 112, + "start": 105 + }, + { + "coverage_state": "covered", + "end": 113, + "start": 113 + }, + { + "coverage_state": "clean", + "end": 114, + "start": 114 + }, + { + "coverage_state": "covered", + "end": 115, + "start": 115 + }, + { + "coverage_state": "clean", + "end": 121, + "start": 116 + }, + { + "coverage_state": "covered", + "end": 122, + "start": 122 + }, + { + "coverage_state": "clean", + "end": 123, + "start": 123 + }, + { + "coverage_state": "covered", + "end": 124, + "start": 124 + }, + { + "coverage_state": "clean", + "end": 130, + "start": 125 + }, + { + "coverage_state": "covered", + "end": 131, + "start": 131 + }, + { + "coverage_state": "clean", + "end": 132, + "start": 132 + }, + { + "coverage_state": "covered", + "end": 133, + "start": 133 + }, + { + "coverage_state": "clean", + "end": 141, + "start": 134 + }, + { + "coverage_state": "covered", + "end": 142, + "start": 142 + }, + { + "coverage_state": "clean", + "end": 143, + "start": 143 + }, + { + "coverage_state": "covered", + "end": 144, + "start": 144 + }, + { + "coverage_state": "clean", + "end": 150, + "start": 145 + }, + { + "coverage_state": "covered", + "end": 151, + "start": 151 + }, + { + "coverage_state": "clean", + "end": 152, + "start": 152 + }, + { + "coverage_state": "covered", + "end": 153, + "start": 153 + }, + { + "coverage_state": "clean", + "end": 161, + "start": 154 + }, + { + "coverage_state": "covered", + "end": 162, + "start": 162 + }, + { + "coverage_state": "clean", + "end": 163, + "start": 163 + }, + { + "coverage_state": "covered", + "end": 164, + "start": 164 + }, + { + "coverage_state": "clean", + "end": 170, + "start": 165 + }, + { + "coverage_state": "covered", + "end": 171, + "start": 171 + }, + { + "coverage_state": "clean", + "end": 172, + "start": 172 + }, + { + "coverage_state": "covered", + "end": 178, + "start": 173 + }, + { + "coverage_state": "clean", + "end": 179, + "start": 179 + }, + { + "coverage_state": "covered", + "end": 192, + "start": 180 + }, + { + "coverage_state": "clean", + "end": 193, + "start": 193 + }, + { + "coverage_state": "covered", + "end": 194, + "start": 194 + }, + { + "coverage_state": "clean", + "end": 197, + "start": 195 + }, + { + "coverage_state": "covered", + "end": 209, + "start": 198 + }, + { + "coverage_state": "clean", + "end": 210, + "start": 210 + }, + { + "coverage_state": "covered", + "end": 215, + "start": 211 + }, + { + "coverage_state": "clean", + "end": null, + "start": 216 + } + ], + "line_coverage": 100.0, + "name": "state_machine.__init__.py" + } + ], + "line_coverage": 100.0, + "name": "state_machine" + } + ], + "lost_souls": { + "item_list": [], + "testcase_list": [] + }, + "specification": { + "comment": "Comment", + "item_dict": { + "_-kytMHcyEemrUqotql_Blw": { + "Description": "The Module shall have a method for getting the previous state.", + "Fitcriterion": "At least one returend state fits to the expecation.", + "Heading": "Previous State", + "ID": "REQ-14", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-15T19:00:32.772+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_-kytMHcyEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_1WGwEHcyEemrUqotql_Blw": { + "Description": "The Module shall have a method for getting the last transition condition.", + "Fitcriterion": "At least one returned transition condition fits to the expectation.", + "Heading": "Last Transition Condition", + "ID": "REQ-12", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-16T10:30:23.088+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_1WGwEHcyEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_7Mq60HcyEemrUqotql_Blw": { + "Description": "The Module shall have a method for checking if the given condition was the last transition condition.", + "Fitcriterion": "At least two calls with different return values fit to the expectation.", + "Heading": "Last Transition Condition was", + "ID": "REQ-13", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-16T21:29:49.830+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_7Mq60HcyEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_AcYg8HczEemrUqotql_Blw": { + "Description": "The Module shall have a method for checking if the given state was the previous state.", + "Fitcriterion": "At least two calls with different return values fit to the expectation.", + "Heading": "Previous State was", + "ID": "REQ-15", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-16T10:32:13.581+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_AcYg8HczEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_AtENoHb5EemzkK7kGUMNfw": { + "Heading": "Module Initialisation", + "last_change": "2019-05-15T19:44:13.807+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_AtENoHb5EemzkK7kGUMNfw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_C0Vi0HgPEemBsuKWG645TA": { + "Description": "The state machine shall use the first active transition. If multiple transition are active, the transition with the highest overlap time will be used.", + "Fitcriterion": "At least one transition with at least two active conditions results in the expected state change.", + "Heading": "Transitionpriorisation", + "ID": "REQ-19", + "ReasonForImplementation": "Compensate the weakness of the execution quantisation.", + "last_change": "2019-05-16T21:16:50.688+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_C0Vi0HgPEemBsuKWG645TA", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_GeMSYHczEemrUqotql_Blw": { + "Description": "The Module shall have a method for getting active time for the previous state.", + "Fitcriterion": "At least one returned duration fits to the previous state duration ($\\pm$ 0.05s).", + "Heading": "Previous State Duration", + "ID": "REQ-16", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-15T19:01:31.605+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_GeMSYHczEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_MR7eOHYYEem_kd-7nxt1sg": { + "Heading": "Transition Callbacks", + "last_change": "2019-05-15T19:44:01.904+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_MR7eOHYYEem_kd-7nxt1sg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_N_VvoHczEemrUqotql_Blw": { + "Heading": "Transition Changes", + "last_change": "2019-05-15T19:43:41.645+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_N_VvoHczEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_P7R34HczEemrUqotql_Blw": { + "Description": "The user shall be able to define multiple states and transitions for the state machine. A transition shall have a start state, a target state and a transition condition. The transition condition shall be a method, where the user is able to calculate the condition on demand.", + "Fitcriterion": "The order of at least three state changes is correct.", + "Heading": "Transitiondefinition and -flow", + "ID": "REQ-17", + "ReasonForImplementation": "Definition of the transitions for a state machine.", + "last_change": "2019-05-16T06:40:52.251+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_P7R34HczEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_RnPZgHcqEemrUqotql_Blw": { + "Heading": "Module Interface", + "last_change": "2019-05-15T19:44:08.696+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_RnPZgHcqEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_XzMFcHYZEem_kd-7nxt1sg": { + "Description": "The state machine shall call all registered methods in the same order like the registration with all user given arguments for a defined set of \\emph{transition\\_condition} and \\emph{target\\_state}.", + "Fitcriterion": "Methods are called in the registration order after state change with all user given arguments for the defined transition condition and targetstate and at least for one other condition not.", + "Heading": "State change callback for a defined transition and targetstate", + "ID": "REQ-1", + "ReasonForImplementation": "Triggering state change actions for a specific transition condition and targetstate.", + "last_change": "2019-05-16T21:37:30.301+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_XzMFcHYZEem_kd-7nxt1sg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_YrdgQHbUEemIm_1APUisDQ": { + "Description": "The state machine shall call all registered methods in the same order like the registration with all user given arguments for a defined \\emph{transition\\_condition} and all \\emph{target\\_states}.", + "Fitcriterion": "Methods are called in the registration order after state change with all user given arguments for the defined transition condition and at least for one other transition condition not.", + "Heading": "State change callback for a defined transition", + "ID": "REQ-2", + "ReasonForImplementation": "Triggering state change actions for a specific transition condition.", + "last_change": "2019-05-16T21:37:44.199+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_YrdgQHbUEemIm_1APUisDQ", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_bDqbMHcrEemrUqotql_Blw": { + "Description": "The state machine shall return {\\tt None} for previous state after initalisation.", + "Fitcriterion": "The previous state is {\\tt None} after initialisation.", + "Heading": "Default Previous State", + "ID": "REQ-7", + "ReasonForImplementation": "Creation of a defined state after initialisation.", + "last_change": "2019-05-16T21:08:10.883+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_bDqbMHcrEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_b_t78Hb4EemzkK7kGUMNfw": { + "Description": "The state machine shall call all registered methods in the same order like the registration with all user given arguments for all \\emph{transition\\_conditions} and a defined \\emph{target\\_state}.", + "Fitcriterion": "Methods are called in the registration order after state change with the defined targetstate and at least for one other targetstate not.", + "Heading": "State change callback for a defined targetstate", + "ID": "REQ-3", + "ReasonForImplementation": "Triggering state change actions for a specific targetstate.", + "last_change": "2019-05-16T21:31:32.716+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_b_t78Hb4EemzkK7kGUMNfw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_e4QPUHb4EemzkK7kGUMNfw": { + "Description": "The state machine shall call all registered methods in the same order like the registration with all user given arguments for all transitions.", + "Fitcriterion": "Methods are called in the registration order after state change.", + "Heading": "State change callback for all kind of state changes", + "ID": "REQ-4", + "ReasonForImplementation": "Triggering state change actions for all transition conditions and targetstates.", + "last_change": "2019-05-16T21:31:47.447+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_e4QPUHb4EemzkK7kGUMNfw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_fE3tMHczEemrUqotql_Blw": { + "Description": "The user shall be able to define for each transition a transition time. On change of the transition condition to {\\tt True}, the transition timer starts counting the time from 0.0s. After reaching the transition time, the transition gets active.", + "Fitcriterion": "The transition time and the restart of the transion timer by setting the transition condition to {\\tt False} and to {\\tt True} again results in the expected transition timing ($\\pm$0.05s).", + "Heading": "Transitiontiming", + "ID": "REQ-18", + "ReasonForImplementation": "Robustness of the state changes (e.g. Oscillating conditions shall be ignored).", + "last_change": "2019-05-17T07:49:08.930+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_fE3tMHczEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_iTFPQHcrEemrUqotql_Blw": { + "Description": "The state machine shall store all given keyword arguments as variables of the classes instance.", + "Fitcriterion": "At least two given keyword arguments with different types are available after initialisation.", + "Heading": "Additional Keyword Arguments", + "ID": "REQ-8", + "ReasonForImplementation": "Store further information (e.g. for calculation of the transition conditions).", + "last_change": "2019-05-16T21:12:43.567+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_iTFPQHcrEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_j2FvkHcqEemrUqotql_Blw": { + "Description": "The state machine shall return the string {\\tt \\_\\_init\\_\\_} for last transition condition after initalisation.", + "Fitcriterion": "The last transition condition is {\\tt \\_\\_init\\_\\_} after initialisation.", + "Heading": "Default Last Transition Condtion", + "ID": "REQ-6", + "ReasonForImplementation": "Creation of a defined state after initialisation.", + "last_change": "2019-05-16T21:08:04.307+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_j2FvkHcqEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_tRZ50HcyEemrUqotql_Blw": { + "Description": "The Module shall have a method for getting the current state.", + "Fitcriterion": "At least one returend state fits to the expecation.", + "Heading": "This State", + "ID": "REQ-9", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-16T10:20:42.971+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_tRZ50HcyEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_vAtUQHcyEemrUqotql_Blw": { + "Description": "The Module shall have a method for checking if the given state is currently active.", + "Fitcriterion": "At least two calls with different return values fit to the expectation.", + "Heading": "This State is", + "ID": "REQ-10", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-16T10:24:15.833+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_vAtUQHcyEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_w49d4HcHEem_Z9BBpwIuJw": { + "Description": "The state machine shall start in the state, given while module initialisation.", + "Fitcriterion": "State machine is in the initial state after initialisation.", + "Heading": "Default State", + "ID": "REQ-5", + "ReasonForImplementation": "Creation of a defined state after initialisation.", + "last_change": "2019-05-16T21:07:54.431+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_w49d4HcHEem_Z9BBpwIuJw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_yVA9oHcyEemrUqotql_Blw": { + "Description": "The Module shall have a method for getting the time since the last state change appears.", + "Fitcriterion": "At least one returned duration fits to the current state duration ($\\pm$ 0.05s).", + "Heading": "This State Duration", + "ID": "REQ-11", + "ReasonForImplementation": "Comfortable user interface.", + "last_change": "2019-05-16T10:30:02.024+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_yVA9oHcyEemrUqotql_Blw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + } + }, + "titel": "Title", + "uid_list_sorted": [ + "_AtENoHb5EemzkK7kGUMNfw", + "_w49d4HcHEem_Z9BBpwIuJw", + "_j2FvkHcqEemrUqotql_Blw", + "_bDqbMHcrEemrUqotql_Blw", + "_iTFPQHcrEemrUqotql_Blw", + "_N_VvoHczEemrUqotql_Blw", + "_P7R34HczEemrUqotql_Blw", + "_fE3tMHczEemrUqotql_Blw", + "_C0Vi0HgPEemBsuKWG645TA", + "_RnPZgHcqEemrUqotql_Blw", + "_tRZ50HcyEemrUqotql_Blw", + "_vAtUQHcyEemrUqotql_Blw", + "_yVA9oHcyEemrUqotql_Blw", + "_1WGwEHcyEemrUqotql_Blw", + "_7Mq60HcyEemrUqotql_Blw", + "_-kytMHcyEemrUqotql_Blw", + "_AcYg8HczEemrUqotql_Blw", + "_GeMSYHczEemrUqotql_Blw", + "_MR7eOHYYEem_kd-7nxt1sg", + "_XzMFcHYZEem_kd-7nxt1sg", + "_YrdgQHbUEemIm_1APUisDQ", + "_b_t78Hb4EemzkK7kGUMNfw", + "_e4QPUHb4EemzkK7kGUMNfw" + ] + }, + "system_information": { + "Architecture": "64bit", + "Distribution": "LinuxMint 19.3 tricia", + "Hostname": "ahorn", + "Kernel": "5.0.0-37-generic (#40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019)", + "Machine": "x86_64", + "Path": "/user_data/data/dirk/prj/modules/state_machine/unittest", + "System": "Linux", + "Username": "dirk" + }, + "testobject_information": { + "Dependencies": [], + "Description": "This Module helps implementing state machines.", + "Name": "state_machine", + "State": "Released", + "Supported Interpreters": "python2, python3", + "Version": "62acd0029b6217cb4a2151caafb560a7" + }, + "testrun_list": [ + { + "heading_dict": { + "_-kytMHcyEemrUqotql_Blw": "Previous State", + "_1WGwEHcyEemrUqotql_Blw": "Last Transition Condition", + "_7Mq60HcyEemrUqotql_Blw": "Last Transition Condition was", + "_AcYg8HczEemrUqotql_Blw": "Previous State was", + "_AtENoHb5EemzkK7kGUMNfw": "Module Initialisation", + "_C0Vi0HgPEemBsuKWG645TA": "Transitionpriorisation", + "_GeMSYHczEemrUqotql_Blw": "Previous State Duration", + "_MR7eOHYYEem_kd-7nxt1sg": "Transition Callbacks", + "_N_VvoHczEemrUqotql_Blw": "Transition Changes", + "_P7R34HczEemrUqotql_Blw": "Transitiondefinition and -flow", + "_RnPZgHcqEemrUqotql_Blw": "Module Interface", + "_XzMFcHYZEem_kd-7nxt1sg": "State change callback for a defined transition and targetstate", + "_YrdgQHbUEemIm_1APUisDQ": "State change callback for a defined transition", + "_bDqbMHcrEemrUqotql_Blw": "Default Previous State", + "_b_t78Hb4EemzkK7kGUMNfw": "State change callback for a defined targetstate", + "_e4QPUHb4EemzkK7kGUMNfw": "State change callback for all kind of state changes", + "_fE3tMHczEemrUqotql_Blw": "Transitiontiming", + "_iTFPQHcrEemrUqotql_Blw": "Additional Keyword Arguments", + "_j2FvkHcqEemrUqotql_Blw": "Default Last Transition Condtion", + "_tRZ50HcyEemrUqotql_Blw": "This State", + "_vAtUQHcyEemrUqotql_Blw": "This State is", + "_w49d4HcHEem_Z9BBpwIuJw": "Default State", + "_yVA9oHcyEemrUqotql_Blw": "This State Duration" + }, + "interpreter": "python 2.7.17 (final)", + "name": "Default Testsession name", + "number_of_failed_tests": 0, + "number_of_possibly_failed_tests": 0, + "number_of_successfull_tests": 19, + "number_of_tests": 19, + "testcase_execution_level": 90, + "testcase_names": { + "0": "Single Test", + "10": "Smoke Test (Minumum subset)", + "50": "Short Test (Subset)", + "90": "Full Test (all defined tests)" + }, + "testcases": { + "_-kytMHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,280", + "created": 1577432368.280073, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 38, + "message": "_-kytMHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 280.0729274749756, + "msg": "_-kytMHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 915.0149822235107, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,280", + "created": 1577432368.280732, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 56, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:28,280", + "created": 1577432368.280329, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 280.32898902893066, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 915.2710437774658, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:28,280", + "created": 1577432368.280567, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 280.566930770874, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 915.5089855194092, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 280.7319164276123, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 915.6739711761475, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00016498565673828125 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:28,281", + "created": 1577432368.281816, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of previous_state() is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of previous_state()", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:28,281", + "created": 1577432368.281468, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of previous_state()): 'state_a' ()", + "module": "test", + "msecs": 281.4679145812988, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 916.409969329834, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of previous_state()", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:28,281", + "created": 1577432368.281652, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of previous_state()): result = 'state_a' ()", + "module": "test", + "msecs": 281.65197372436523, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 916.5940284729004, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 281.8160057067871, + "msg": "Returnvalue of previous_state() is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 916.7580604553223, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.000164031982421875 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0017430782318115234, + "time_finished": "2019-12-27 08:39:28,281", + "time_start": "2019-12-27 08:39:28,280" + }, + "_1WGwEHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,276", + "created": 1577432368.276143, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 36, + "message": "_1WGwEHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 276.14307403564453, + "msg": "_1WGwEHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 911.0851287841797, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,276", + "created": 1577432368.276886, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_last_transition_condition", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 41, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:28,276", + "created": 1577432368.276421, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 276.42107009887695, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 911.3631248474121, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:28,276", + "created": 1577432368.2767, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 276.7000198364258, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 911.6420745849609, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 276.885986328125, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 911.8280410766602, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00018596649169921875 + }, + { + "args": [ + "'condition_a'", + "" + ], + "asctime": "2019-12-27 08:39:28,277", + "created": 1577432368.277494, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of last_transition_condition() is correct (Content 'condition_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of last_transition_condition()", + "'condition_a'", + "" + ], + "asctime": "2019-12-27 08:39:28,277", + "created": 1577432368.277121, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of last_transition_condition()): 'condition_a' ()", + "module": "test", + "msecs": 277.12106704711914, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 912.0631217956543, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of last_transition_condition()", + "'condition_a'", + "" + ], + "asctime": "2019-12-27 08:39:28,277", + "created": 1577432368.277271, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of last_transition_condition()): result = 'condition_a' ()", + "module": "test", + "msecs": 277.271032333374, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 912.2130870819092, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 277.493953704834, + "msg": "Returnvalue of last_transition_condition() is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 912.4360084533691, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00022292137145996094 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0013508796691894531, + "time_finished": "2019-12-27 08:39:28,277", + "time_start": "2019-12-27 08:39:28,276" + }, + "_7Mq60HcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,277", + "created": 1577432368.277894, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 37, + "message": "_7Mq60HcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 277.8940200805664, + "msg": "_7Mq60HcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 912.8360748291016, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,278", + "created": 1577432368.278593, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_last_transition_condition_was", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 48, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:28,278", + "created": 1577432368.278146, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 278.14602851867676, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 913.0880832672119, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:28,278", + "created": 1577432368.27842, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 278.41997146606445, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 913.3620262145996, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 278.5930633544922, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 913.5351181030273, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00017309188842773438 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,279", + "created": 1577432368.27915, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of last_transition_condition(condition_a) is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of last_transition_condition(condition_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,278", + "created": 1577432368.278842, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of last_transition_condition(condition_a)): True ()", + "module": "test", + "msecs": 278.8419723510742, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 913.7840270996094, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of last_transition_condition(condition_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,278", + "created": 1577432368.278992, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of last_transition_condition(condition_a)): result = True ()", + "module": "test", + "msecs": 278.9919376373291, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 913.9339923858643, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 279.15000915527344, + "msg": "Returnvalue of last_transition_condition(condition_a) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 914.0920639038086, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00015807151794433594 + }, + { + "args": [ + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,279", + "created": 1577432368.279675, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of last_transition_condition(condition_c) is correct (Content False and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of last_transition_condition(condition_c)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,279", + "created": 1577432368.279388, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of last_transition_condition(condition_c)): False ()", + "module": "test", + "msecs": 279.3879508972168, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 914.330005645752, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of last_transition_condition(condition_c)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,279", + "created": 1577432368.279531, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of last_transition_condition(condition_c)): result = False ()", + "module": "test", + "msecs": 279.53100204467773, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 914.4730567932129, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 279.6750068664551, + "msg": "Returnvalue of last_transition_condition(condition_c) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 914.6170616149902, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00014400482177734375 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0017809867858886719, + "time_finished": "2019-12-27 08:39:28,279", + "time_start": "2019-12-27 08:39:28,277" + }, + "_AcYg8HczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,282", + "created": 1577432368.282251, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 39, + "message": "_AcYg8HczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 282.25088119506836, + "msg": "_AcYg8HczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 917.1929359436035, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,282", + "created": 1577432368.282974, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state_was", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 63, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:28,282", + "created": 1577432368.282536, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 282.5360298156738, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 917.478084564209, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:28,282", + "created": 1577432368.282799, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 282.79900550842285, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 917.741060256958, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 282.9740047454834, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 917.9160594940186, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00017499923706054688 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,283", + "created": 1577432368.283525, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of previous_state_was(state_a) is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of previous_state_was(state_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,283", + "created": 1577432368.283225, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of previous_state_was(state_a)): True ()", + "module": "test", + "msecs": 283.22505950927734, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 918.1671142578125, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of previous_state_was(state_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,283", + "created": 1577432368.283376, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of previous_state_was(state_a)): result = True ()", + "module": "test", + "msecs": 283.37597846984863, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 918.3180332183838, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 283.5249900817871, + "msg": "Returnvalue of previous_state_was(state_a) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 918.4670448303223, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00014901161193847656 + }, + { + "args": [ + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,284", + "created": 1577432368.284041, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of previous_state_was(state_b) is correct (Content False and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of previous_state_was(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,283", + "created": 1577432368.283754, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of previous_state_was(state_b)): False ()", + "module": "test", + "msecs": 283.7541103363037, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 918.6961650848389, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of previous_state_was(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,283", + "created": 1577432368.283898, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of previous_state_was(state_b)): result = False ()", + "module": "test", + "msecs": 283.89811515808105, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 918.8401699066162, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 284.0409278869629, + "msg": "Returnvalue of previous_state_was(state_b) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 918.982982635498, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00014281272888183594 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0017900466918945312, + "time_finished": "2019-12-27 08:39:28,284", + "time_start": "2019-12-27 08:39:28,282" + }, + "_C0Vi0HgPEemBsuKWG645TA": { + "args": null, + "asctime": "2019-12-27 08:39:27,775", + "created": 1577432367.775715, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 30, + "message": "_C0Vi0HgPEemBsuKWG645TA", + "module": "__init__", + "moduleLogger": [], + "msecs": 775.7151126861572, + "msg": "_C0Vi0HgPEemBsuKWG645TA", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 410.6571674346924, + "testcaseLogger": [ + { + "args": [ + 0.151, + 0.15 + ], + "asctime": "2019-12-27 08:39:27,776", + "created": 1577432367.776229, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 136, + "message": "Initialising state machine with state_a, a transition to state_b after 0.151s and a transition to state_c after 0.150s", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:27,776", + "created": 1577432367.776049, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 776.0488986968994, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 410.99095344543457, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 776.2289047241211, + "msg": "Initialising state machine with state_a, a transition to state_b after %.03fs and a transition to state_c after %.03fs", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 411.17095947265625, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0001800060272216797 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,776", + "created": 1577432367.776736, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Initial state after Initialisation is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,776", + "created": 1577432367.776467, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Initial state after Initialisation): 'state_a' ()", + "module": "test", + "msecs": 776.4670848846436, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 411.4091396331787, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,776", + "created": 1577432367.776603, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Initial state after Initialisation): result = 'state_a' ()", + "module": "test", + "msecs": 776.6029834747314, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 411.5450382232666, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 776.7360210418701, + "msg": "Initial state after Initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 411.6780757904053, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00013303756713867188 + }, + { + "args": [ + 0.3 + ], + "asctime": "2019-12-27 08:39:28,018", + "created": 1577432368.018843, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 144, + "message": "Waiting for 0.300s or state change", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + 9.775161743164062e-06 + ], + "asctime": "2019-12-27 08:39:27,776", + "created": 1577432367.776937, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.000s", + "module": "test_transitions", + "msecs": 776.9370079040527, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 411.8790626525879, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 0.06033587455749512 + ], + "asctime": "2019-12-27 08:39:27,837", + "created": 1577432367.837277, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.060s", + "module": "test_transitions", + "msecs": 837.2769355773926, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 472.21899032592773, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 0.12077593803405762 + ], + "asctime": "2019-12-27 08:39:27,897", + "created": 1577432367.897731, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.121s", + "module": "test_transitions", + "msecs": 897.7310657501221, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 532.6731204986572, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 0.18125200271606445 + ], + "asctime": "2019-12-27 08:39:27,958", + "created": 1577432367.958198, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.181s", + "module": "test_transitions", + "msecs": 958.198070526123, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 593.1401252746582, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_a'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,958", + "created": 1577432367.958491, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_a' -> 'state_c'", + "module": "__init__", + "msecs": 958.4910869598389, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 593.433141708374, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 18.84293556213379, + "msg": "Waiting for %.3fs or state change", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 653.784990310669, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.06035184860229492 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:28,019", + "created": 1577432368.019661, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 1st cycle is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 1st cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:28,019", + "created": 1577432368.019287, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 1st cycle): 'state_c' ()", + "module": "test", + "msecs": 19.287109375, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 654.2291641235352, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after 1st cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:28,019", + "created": 1577432368.019478, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 1st cycle): result = 'state_c' ()", + "module": "test", + "msecs": 19.47808265686035, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 654.4201374053955, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 19.66094970703125, + "msg": "State after 1st cycle is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 654.6030044555664, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00018286705017089844 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.24394583702087402, + "time_finished": "2019-12-27 08:39:28,019", + "time_start": "2019-12-27 08:39:27,775" + }, + "_GeMSYHczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,284", + "created": 1577432368.284448, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 40, + "message": "_GeMSYHczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 284.44790840148926, + "msg": "_GeMSYHczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 919.3899631500244, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,036", + "created": 1577432369.03659, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 76, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:28,284", + "created": 1577432368.284695, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 284.6949100494385, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 919.6369647979736, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:28,284", + "created": 1577432368.284961, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 284.9609851837158, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 919.903039932251, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 0.75 + ], + "asctime": "2019-12-27 08:39:28,285", + "created": 1577432368.285144, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 73, + "message": "Waiting for 0.75s", + "module": "test_interface", + "msecs": 285.1440906524658, + "msg": "Waiting for %.2fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 920.086145401001, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,036", + "created": 1577432369.036269, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 36.26894950866699, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1671.2110042572021, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 36.5900993347168, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1671.532154083252, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0003211498260498047 + }, + { + "args": [ + "0.7514290809631348", + "0.7", + "0.8", + "" + ], + "asctime": "2019-12-27 08:39:29,037", + "created": 1577432369.037318, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Return Value of previous_state_duration() is correct (Content 0.7514290809631348 in [0.7 ... 0.8] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return Value of previous_state_duration()", + "0.7514290809631348", + "" + ], + "asctime": "2019-12-27 08:39:29,036", + "created": 1577432369.036942, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return Value of previous_state_duration()): 0.7514290809631348 ()", + "module": "test", + "msecs": 36.9420051574707, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1671.8840599060059, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Return Value of previous_state_duration()", + "0.7", + "0.8" + ], + "asctime": "2019-12-27 08:39:29,037", + "created": 1577432369.037137, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Return Value of previous_state_duration()): 0.7 <= result <= 0.8", + "module": "test", + "msecs": 37.13703155517578, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1672.079086303711, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 37.31799125671387, + "msg": "Return Value of previous_state_duration() is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1672.260046005249, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00018095970153808594 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.7528700828552246, + "time_finished": "2019-12-27 08:39:29,037", + "time_start": "2019-12-27 08:39:28,284" + }, + "_P7R34HczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393924, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 28, + "message": "_P7R34HczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 393.9239978790283, + "msg": "_P7R34HczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.866052627563477, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394065, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 44, + "message": "Initialising state machine with state_a", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394016, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 394.0160274505615, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.95808219909668, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 394.06490325927734, + "msg": "Initialising state machine with state_a", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.0069580078125, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.887580871582031e-05 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394256, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Initial state after Initialisation is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394128, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Initial state after Initialisation): 'state_a' ()", + "module": "test", + "msecs": 394.12808418273926, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.070138931274414, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394176, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Initial state after Initialisation): result = 'state_a' ()", + "module": "test", + "msecs": 394.1760063171387, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.118061065673828, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 394.2561149597168, + "msg": "Initial state after Initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.198169708251953, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 8.0108642578125e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394407, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 47, + "message": "Work routine executed the 1st time to do the state change. Defined Transitions are: True->state_b (0.0s); False->state_c (0.0s)", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394358, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 394.35791969299316, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.29997444152832, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 394.4070339202881, + "msg": "Work routine executed the 1st time to do the state change. Defined Transitions are: True->state_b (0.0s); False->state_c (0.0s)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.349088668823242, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.9114227294921875e-05 + }, + { + "args": [ + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.39455, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 1st execution of work method is correct (Content 'state_b' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 1st execution of work method", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394469, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 1st execution of work method): 'state_b' ()", + "module": "test", + "msecs": 394.4690227508545, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.41107749938965, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after 1st execution of work method", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394508, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 1st execution of work method): result = 'state_b' ()", + "module": "test", + "msecs": 394.50788497924805, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.449939727783203, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 394.550085067749, + "msg": "State after 1st execution of work method is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.49213981628418, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.220008850097656e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394664, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 50, + "message": "Work routine executed the 2nd time to do the state change. Defined Transitions are: False->state_a (0.0s); True->state_c (0.0s)", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.39462, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 394.6199417114258, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.561996459960938, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 394.66404914855957, + "msg": "Work routine executed the 2nd time to do the state change. Defined Transitions are: False->state_a (0.0s); True->state_c (0.0s)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.606103897094727, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.410743713378906e-05 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394802, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 2nd execution of work method is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 2nd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394725, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 2nd execution of work method): 'state_c' ()", + "module": "test", + "msecs": 394.72508430480957, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.667139053344727, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after 2nd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394764, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 2nd execution of work method): result = 'state_c' ()", + "module": "test", + "msecs": 394.7639465332031, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.70600128173828, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 394.8020935058594, + "msg": "State after 2nd execution of work method is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.74414825439453, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 3.814697265625e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394861, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 53, + "message": "Work routine executed the 3rd time with no effect. No Transitions starting from state_c (dead end)", + "module": "test_transitions", + "moduleLogger": [], + "msecs": 394.86098289489746, + "msg": "Work routine executed the 3rd time with no effect. No Transitions starting from state_c (dead end)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.803037643432617, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.395003, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 3rd execution of work method is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 3rd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.394922, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 3rd execution of work method): 'state_c' ()", + "module": "test", + "msecs": 394.92201805114746, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.864072799682617, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after 3rd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,394", + "created": 1577432367.39496, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 3rd execution of work method): result = 'state_c' ()", + "module": "test", + "msecs": 394.9599266052246, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.901981353759766, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 395.003080368042, + "msg": "State after 3rd execution of work method is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 29.94513511657715, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.315376281738281e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0010790824890136719, + "time_finished": "2019-12-27 08:39:27,395", + "time_start": "2019-12-27 08:39:27,393" + }, + "_XzMFcHYZEem_kd-7nxt1sg": { + "args": null, + "asctime": "2019-12-27 08:39:29,037", + "created": 1577432369.037837, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 43, + "message": "_XzMFcHYZEem_kd-7nxt1sg", + "module": "__init__", + "moduleLogger": [], + "msecs": 37.83702850341797, + "msg": "_XzMFcHYZEem_kd-7nxt1sg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1672.7790832519531, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,040", + "created": 1577432369.040624, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,038", + "created": 1577432369.038128, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 38.127899169921875, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1673.069953918457, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:29,038", + "created": 1577432369.03838, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 38.37990760803223, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1673.3219623565674, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,038", + "created": 1577432369.038868, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 38.867950439453125, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1673.8100051879883, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:29,039", + "created": 1577432369.039138, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 2 caused by callback_execution", + "module": "test_callbacks", + "msecs": 39.138078689575195, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1674.0801334381104, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:29,039", + "created": 1577432369.039325, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 39.32499885559082, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1674.267053604126, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:29,039", + "created": 1577432369.039501, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 4 caused by sequence progress", + "module": "test_callbacks", + "msecs": 39.50095176696777, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1674.443006515503, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,039", + "created": 1577432369.039711, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 39.71099853515625, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1674.6530532836914, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:29,039", + "created": 1577432369.03988, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 5 caused by sequence progress", + "module": "test_callbacks", + "msecs": 39.88003730773926, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1674.8220920562744, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,040", + "created": 1577432369.04009, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 40.090084075927734, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1675.032138824463, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:29,040", + "created": 1577432369.040259, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 6 caused by sequence progress", + "module": "test_callbacks", + "msecs": 40.25888442993164, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1675.2009391784668, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,040", + "created": 1577432369.040463, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 40.46297073364258, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1675.4050254821777, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 40.62390327453613, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1675.5659580230713, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0001609325408935547 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,041", + "created": 1577432369.041703, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number", + "[ 1 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,040", + "created": 1577432369.040898, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number): [ 1 ] ()", + "module": "test", + "msecs": 40.89808464050293, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1675.840139389038, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number", + "[ 1 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,041", + "created": 1577432369.041058, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number): result = [ 1 ] ()", + "module": "test", + "msecs": 41.05806350708008, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1676.0001182556152, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,041", + "created": 1577432369.041229, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 1 ()", + "module": "test", + "msecs": 41.2290096282959, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1676.171064376831, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,041", + "created": 1577432369.0414, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 1 ()", + "module": "test", + "msecs": 41.39995574951172, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1676.3420104980469, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,041", + "created": 1577432369.041553, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 1 and Type is ).", + "module": "test", + "msecs": 41.55302047729492, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1676.49507522583, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 41.702985763549805, + "msg": "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1676.645040512085, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0001499652862548828 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,042", + "created": 1577432369.042696, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number", + "[ 2 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,041", + "created": 1577432369.041968, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number): [ 2 ] ()", + "module": "test", + "msecs": 41.96810722351074, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1676.910161972046, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number", + "[ 2 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,042", + "created": 1577432369.042121, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number): result = [ 2 ] ()", + "module": "test", + "msecs": 42.120933532714844, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1677.06298828125, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,042", + "created": 1577432369.042274, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 42.27399826049805, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1677.2160530090332, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,042", + "created": 1577432369.042419, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 42.4189567565918, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1677.361011505127, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,042", + "created": 1577432369.04256, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 42.56010055541992, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1677.502155303955, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 42.69599914550781, + "msg": "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1677.638053894043, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00013589859008789062 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.004858970642089844, + "time_finished": "2019-12-27 08:39:29,042", + "time_start": "2019-12-27 08:39:29,037" + }, + "_YrdgQHbUEemIm_1APUisDQ": { + "args": null, + "asctime": "2019-12-27 08:39:29,043", + "created": 1577432369.043111, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 44, + "message": "_YrdgQHbUEemIm_1APUisDQ", + "module": "__init__", + "moduleLogger": [], + "msecs": 43.11108589172363, + "msg": "_YrdgQHbUEemIm_1APUisDQ", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1678.0531406402588, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045525, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,043", + "created": 1577432369.043374, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 43.374061584472656, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1678.3161163330078, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:29,043", + "created": 1577432369.043583, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 43.582916259765625, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1678.5249710083008, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,043", + "created": 1577432369.043826, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 43.82610321044922, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1678.7681579589844, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:29,044", + "created": 1577432369.044012, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 2 caused by sequence progress", + "module": "test_callbacks", + "msecs": 44.01206970214844, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1678.9541244506836, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,044", + "created": 1577432369.044218, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 44.21806335449219, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1679.1601181030273, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:29,044", + "created": 1577432369.044381, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 44.380903244018555, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1679.3229579925537, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:29,044", + "created": 1577432369.044542, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 4 caused by callback_execution", + "module": "test_callbacks", + "msecs": 44.54207420349121, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1679.4841289520264, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:29,044", + "created": 1577432369.044706, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 5 caused by sequence progress", + "module": "test_callbacks", + "msecs": 44.706106185913086, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1679.6481609344482, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,044", + "created": 1577432369.044909, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 44.909000396728516, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1679.8510551452637, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045064, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 6 caused by callback_execution", + "module": "test_callbacks", + "msecs": 45.06397247314453, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.0060272216797, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 7 + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045235, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 7 caused by callback_execution", + "module": "test_callbacks", + "msecs": 45.23491859436035, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.1769733428955, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 8 + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045407, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 8 caused by sequence progress", + "module": "test_callbacks", + "msecs": 45.40705680847168, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.3491115570068, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045473, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 45.47309875488281, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.415153503418, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 45.52507400512695, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.467128753662, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 5.1975250244140625e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number", + "[ 2, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045611, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number): [ 2, 5 ] ()", + "module": "test", + "msecs": 45.610904693603516, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.5529594421387, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number", + "[ 2, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045663, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number): result = [ 2, 5 ] ()", + "module": "test", + "msecs": 45.66311836242676, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.605173110962, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045718, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 45.71795463562012, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.6600093841553, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045764, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 45.76396942138672, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.7060241699219, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045815, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 45.81499099731445, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.7570457458496, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045863, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 5 ()", + "module": "test", + "msecs": 45.86291313171387, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.804967880249, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.04591, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 5 ()", + "module": "test", + "msecs": 45.909881591796875, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.851936340332, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,045", + "created": 1577432369.045956, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 5 and Type is ).", + "module": "test", + "msecs": 45.95589637756348, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.8979511260986, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 46.000003814697266, + "msg": "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1680.9420585632324, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.410743713378906e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046459, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number", + "[ 3, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.04608, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number): [ 3, 6 ] ()", + "module": "test", + "msecs": 46.08011245727539, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.0221672058105, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number", + "[ 3, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.04613, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number): result = [ 3, 6 ] ()", + "module": "test", + "msecs": 46.12994194030762, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.0719966888428, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "3", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046179, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 3 ()", + "module": "test", + "msecs": 46.17905616760254, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.1211109161377, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "3", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046227, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 3 ()", + "module": "test", + "msecs": 46.22697830200195, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.169033050537, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "3", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046273, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 3 and Type is ).", + "module": "test", + "msecs": 46.272993087768555, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.2150478363037, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.04632, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 6 ()", + "module": "test", + "msecs": 46.31996154785156, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.2620162963867, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046364, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 6 ()", + "module": "test", + "msecs": 46.36406898498535, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.3061237335205, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "6", + "" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046415, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 6 and Type is ).", + "module": "test", + "msecs": 46.415090560913086, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.3571453094482, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 46.45895957946777, + "msg": "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.401014328003, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.38690185546875e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0033478736877441406, + "time_finished": "2019-12-27 08:39:29,046", + "time_start": "2019-12-27 08:39:29,043" + }, + "_bDqbMHcrEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392555, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 24, + "message": "_bDqbMHcrEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 392.55499839782715, + "msg": "_bDqbMHcrEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.497053146362305, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392666, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_last_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392621, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 392.6210403442383, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.563095092773438, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 392.6661014556885, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.608156204223633, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.506111145019531e-05 + }, + { + "args": [ + "None", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.39281, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Last state after initialisation is correct (Content None and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Last state after initialisation", + "None", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392727, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Last state after initialisation): None ()", + "module": "test", + "msecs": 392.7268981933594, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.66895294189453, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Last state after initialisation", + "None", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.39277, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Last state after initialisation): result = None ()", + "module": "test", + "msecs": 392.77005195617676, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.712106704711914, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 392.8101062774658, + "msg": "Last state after initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.752161026000977, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.00543212890625e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0002551078796386719, + "time_finished": "2019-12-27 08:39:27,392", + "time_start": "2019-12-27 08:39:27,392" + }, + "_b_t78Hb4EemzkK7kGUMNfw": { + "args": null, + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046594, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 45, + "message": "_b_t78Hb4EemzkK7kGUMNfw", + "module": "__init__", + "moduleLogger": [], + "msecs": 46.59390449523926, + "msg": "_b_t78Hb4EemzkK7kGUMNfw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.5359592437744, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047327, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046681, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 46.68092727661133, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.6229820251465, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046737, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 46.736955642700195, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.6790103912354, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046804, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 46.803951263427734, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.746006011963, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046849, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 2 caused by callback_execution", + "module": "test_callbacks", + "msecs": 46.84901237487793, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.791067123413, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046896, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 46.89598083496094, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.838035583496, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046945, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 4 caused by sequence progress", + "module": "test_callbacks", + "msecs": 46.94509506225586, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.887149810791, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,046", + "created": 1577432369.046998, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 46.998023986816406, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.9400787353516, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047041, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 5 caused by sequence progress", + "module": "test_callbacks", + "msecs": 47.04093933105469, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1681.9829940795898, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047092, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 47.09196090698242, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.0340156555176, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047136, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 6 caused by callback_execution", + "module": "test_callbacks", + "msecs": 47.13606834411621, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.0781230926514, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 7 + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047178, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 7 caused by callback_execution", + "module": "test_callbacks", + "msecs": 47.178030014038086, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.1200847625732, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 8 + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047221, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 8 caused by sequence progress", + "module": "test_callbacks", + "msecs": 47.22094535827637, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.1630001068115, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047271, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 47.271013259887695, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.2130680084229, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 47.32704162597656, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.2690963745117, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 5.602836608886719e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047728, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number", + "[ 1, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047411, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number): [ 1, 5 ] ()", + "module": "test", + "msecs": 47.41096496582031, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.3530197143555, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number", + "[ 1, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047453, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number): result = [ 1, 5 ] ()", + "module": "test", + "msecs": 47.45292663574219, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.3949813842773, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047494, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 1 ()", + "module": "test", + "msecs": 47.493934631347656, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.4359893798828, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047537, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 1 ()", + "module": "test", + "msecs": 47.53708839416504, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.4791431427002, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047575, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 1 and Type is ).", + "module": "test", + "msecs": 47.57499694824219, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.5170516967773, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047615, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 5 ()", + "module": "test", + "msecs": 47.61505126953125, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.5571060180664, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047651, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 5 ()", + "module": "test", + "msecs": 47.651052474975586, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.5931072235107, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047692, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 5 and Type is ).", + "module": "test", + "msecs": 47.692060470581055, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.6341152191162, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 47.72806167602539, + "msg": "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.6701164245605, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048115, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number", + "[ 2, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047798, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number): [ 2, 6 ] ()", + "module": "test", + "msecs": 47.79791831970215, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.7399730682373, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number", + "[ 2, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047839, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number): result = [ 2, 6 ] ()", + "module": "test", + "msecs": 47.83892631530762, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.7809810638428, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047879, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 47.87898063659668, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.8210353851318, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047918, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 47.918081283569336, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.8601360321045, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,047", + "created": 1577432369.047961, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 47.96099662780762, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.9030513763428, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048003, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 6 ()", + "module": "test", + "msecs": 48.00295829772949, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.9450130462646, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048042, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 6 ()", + "module": "test", + "msecs": 48.04205894470215, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1682.9841136932373, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "6", + "" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048079, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 6 and Type is ).", + "module": "test", + "msecs": 48.07901382446289, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.021068572998, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 48.11501502990723, + "msg": "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.0570697784424, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0015211105346679688, + "time_finished": "2019-12-27 08:39:29,048", + "time_start": "2019-12-27 08:39:29,046" + }, + "_e4QPUHb4EemzkK7kGUMNfw": { + "args": null, + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048225, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 46, + "message": "_e4QPUHb4EemzkK7kGUMNfw", + "module": "__init__", + "moduleLogger": [], + "msecs": 48.22492599487305, + "msg": "_e4QPUHb4EemzkK7kGUMNfw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.1669807434082, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049101, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048301, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 48.300981521606445, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.2430362701416, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048356, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 48.356056213378906, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.298110961914, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048423, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 48.423051834106445, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.3651065826416, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048467, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 2 caused by callback_execution", + "module": "test_callbacks", + "msecs": 48.46692085266113, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.4089756011963, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048511, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 48.51102828979492, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.45308303833, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048556, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 4 caused by sequence progress", + "module": "test_callbacks", + "msecs": 48.55608940124512, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.4981441497803, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048607, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 48.60711097717285, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.549165725708, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048648, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 5 caused by callback_execution", + "module": "test_callbacks", + "msecs": 48.64811897277832, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.5901737213135, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048693, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 6 caused by callback_execution", + "module": "test_callbacks", + "msecs": 48.692941665649414, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.6349964141846, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 7 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048741, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 7 caused by sequence progress", + "module": "test_callbacks", + "msecs": 48.74110221862793, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.683156967163, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048791, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 48.790931701660156, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.7329864501953, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 8 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048831, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 8 caused by callback_execution", + "module": "test_callbacks", + "msecs": 48.83098602294922, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.7730407714844, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 9 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048876, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 9 caused by callback_execution", + "module": "test_callbacks", + "msecs": 48.876047134399414, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.8181018829346, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 10 + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.04892, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 10 caused by sequence progress", + "module": "test_callbacks", + "msecs": 48.9199161529541, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.8619709014893, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,048", + "created": 1577432369.048969, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 48.96903038024902, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.9110851287842, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 11 + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049011, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 11 caused by callback_execution", + "module": "test_callbacks", + "msecs": 49.0109920501709, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.953046798706, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 12 + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049056, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 12 caused by callback_execution", + "module": "test_callbacks", + "msecs": 49.056053161621094, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1683.9981079101562, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 49.10111427307129, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.0431690216064, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.506111145019531e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049761, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number", + "[ 1, 4, 7, 10 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049178, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number): [ 1, 4, 7, 10 ] ()", + "module": "test", + "msecs": 49.17788505554199, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.1199398040771, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number", + "[ 1, 4, 7, 10 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049224, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number): result = [ 1, 4, 7, 10 ] ()", + "module": "test", + "msecs": 49.223899841308594, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.1659545898438, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049266, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 1 ()", + "module": "test", + "msecs": 49.26609992980957, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.2081546783447, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049303, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 1 ()", + "module": "test", + "msecs": 49.30305480957031, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.2451095581055, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049341, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 1 and Type is ).", + "module": "test", + "msecs": 49.34096336364746, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.2830181121826, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "4", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049408, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 4 ()", + "module": "test", + "msecs": 49.407958984375, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.3500137329102, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "4", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049459, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 4 ()", + "module": "test", + "msecs": 49.458980560302734, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.401035308838, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "4", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049497, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 4 and Type is ).", + "module": "test", + "msecs": 49.49688911437988, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.438943862915, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "7", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049535, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 3): 7 ()", + "module": "test", + "msecs": 49.53503608703613, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.4770908355713, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "7", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049571, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 3): result = 7 ()", + "module": "test", + "msecs": 49.57103729248047, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.5130920410156, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "7", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049612, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 3 is correct (Content 7 and Type is ).", + "module": "test", + "msecs": 49.61204528808594, + "msg": "Submitted value number 3 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.554100036621, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "10", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.04965, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 4): 10 ()", + "module": "test", + "msecs": 49.649953842163086, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.5920085906982, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "10", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049685, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 4): result = 10 ()", + "module": "test", + "msecs": 49.685001373291016, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.6270561218262, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "10", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049725, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 4 is correct (Content 10 and Type is ).", + "module": "test", + "msecs": 49.72505569458008, + "msg": "Submitted value number 4 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.6671104431152, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 49.761056900024414, + "msg": "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.7031116485596, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050421, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number", + "[ 2, 5, 8, 11 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.04983, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number): [ 2, 5, 8, 11 ] ()", + "module": "test", + "msecs": 49.829959869384766, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.77201461792, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number", + "[ 2, 5, 8, 11 ]", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049872, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number): result = [ 2, 5, 8, 11 ] ()", + "module": "test", + "msecs": 49.87192153930664, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.8139762878418, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049911, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 49.9110221862793, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.8530769348145, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,049", + "created": 1577432369.049964, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 49.963951110839844, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.906005859375, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050013, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 50.013065338134766, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.95512008667, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050054, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 5 ()", + "module": "test", + "msecs": 50.054073333740234, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1684.9961280822754, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.05009, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 5 ()", + "module": "test", + "msecs": 50.09007453918457, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.0321292877197, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "5", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050127, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 5 and Type is ).", + "module": "test", + "msecs": 50.12702941894531, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.0690841674805, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "8", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050165, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 3): 8 ()", + "module": "test", + "msecs": 50.16493797302246, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.1069927215576, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "8", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050222, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 3): result = 8 ()", + "module": "test", + "msecs": 50.221920013427734, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.163974761963, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "8", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050271, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 3 is correct (Content 8 and Type is ).", + "module": "test", + "msecs": 50.271034240722656, + "msg": "Submitted value number 3 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.2130889892578, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "11", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050313, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 4): 11 ()", + "module": "test", + "msecs": 50.31299591064453, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.2550506591797, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "11", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050349, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 4): result = 11 ()", + "module": "test", + "msecs": 50.34899711608887, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.291051864624, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "11", + "" + ], + "asctime": "2019-12-27 08:39:29,050", + "created": 1577432369.050385, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 4 is correct (Content 11 and Type is ).", + "module": "test", + "msecs": 50.3849983215332, + "msg": "Submitted value number 4 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.3270530700684, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 50.42099952697754, + "msg": "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 1685.3630542755127, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.002196073532104492, + "time_finished": "2019-12-27 08:39:29,050", + "time_start": "2019-12-27 08:39:29,048" + }, + "_fE3tMHczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.395118, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 29, + "message": "_fE3tMHczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 395.11799812316895, + "msg": "_fE3tMHczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 30.0600528717041, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.395262, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "timing", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 84, + "message": "Initialising state machine with state_a", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.39521, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 395.21002769470215, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 30.152082443237305, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 395.2620029449463, + "msg": "Initialising state machine with state_a", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 30.204057693481445, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 5.1975250244140625e-05 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.395409, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Initial state after Initialisation is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.395326, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Initial state after Initialisation): 'state_a' ()", + "module": "test", + "msecs": 395.3258991241455, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 30.267953872680664, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:27,395", + "created": 1577432367.395367, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Initial state after Initialisation): result = 'state_a' ()", + "module": "test", + "msecs": 395.366907119751, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 30.308961868286133, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 395.40910720825195, + "msg": "Initial state after Initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 30.35116195678711, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.220008850097656e-05 + }, + { + "args": [ + 0.16 + ], + "asctime": "2019-12-27 08:39:27,546", + "created": 1577432367.546092, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "timing", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 92, + "message": "Waiting for 0.160s or state change", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:27,545", + "created": 1577432367.545599, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 545.5989837646484, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 180.5410385131836, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 546.0920333862305, + "msg": "Waiting for %.3fs or state change", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 181.03408813476562, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0004930496215820312 + }, + { + "args": [ + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:27,547", + "created": 1577432367.547038, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 1st cycle is correct (Content 'state_b' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 1st cycle", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:27,546", + "created": 1577432367.546641, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 1st cycle): 'state_b' ()", + "module": "test", + "msecs": 546.6411113739014, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 181.58316612243652, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after 1st cycle", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:27,546", + "created": 1577432367.546832, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 1st cycle): result = 'state_b' ()", + "module": "test", + "msecs": 546.8320846557617, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 181.77413940429688, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 547.0380783081055, + "msg": "State after 1st cycle is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 181.98013305664062, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00020599365234375 + }, + { + "args": [ + "0.15059781074523926", + "0.145", + "0.155", + "" + ], + "asctime": "2019-12-27 08:39:27,547", + "created": 1577432367.547609, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Transition time after 1st cycle is correct (Content 0.15059781074523926 in [0.145 ... 0.155] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Transition time after 1st cycle", + "0.15059781074523926", + "" + ], + "asctime": "2019-12-27 08:39:27,547", + "created": 1577432367.547298, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Transition time after 1st cycle): 0.15059781074523926 ()", + "module": "test", + "msecs": 547.2979545593262, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 182.24000930786133, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Transition time after 1st cycle", + "0.145", + "0.155" + ], + "asctime": "2019-12-27 08:39:27,547", + "created": 1577432367.547457, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Transition time after 1st cycle): 0.145 <= result <= 0.155", + "module": "test", + "msecs": 547.4569797515869, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 182.39903450012207, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 547.6090908050537, + "msg": "Transition time after 1st cycle is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 182.55114555358887, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00015211105346679688 + }, + { + "args": [ + 0.235 + ], + "asctime": "2019-12-27 08:39:27,773", + "created": 1577432367.773521, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "timing", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 109, + "message": "Waiting for 0.235s or state change", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,773", + "created": 1577432367.773051, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 773.0510234832764, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 407.9930782318115, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 773.5209465026855, + "msg": "Waiting for %.3fs or state change", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 408.4630012512207, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0004699230194091797 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,774", + "created": 1577432367.774207, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 2nd cycle is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 2nd cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,773", + "created": 1577432367.773866, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 2nd cycle): 'state_c' ()", + "module": "test", + "msecs": 773.8659381866455, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 408.80799293518066, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after 2nd cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,774", + "created": 1577432367.774039, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 2nd cycle): result = 'state_c' ()", + "module": "test", + "msecs": 774.0390300750732, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 408.9810848236084, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 774.2071151733398, + "msg": "State after 2nd cycle is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 409.149169921875, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00016808509826660156 + }, + { + "args": [ + "0.15039491653442383", + "0.145", + "0.155", + "" + ], + "asctime": "2019-12-27 08:39:27,774", + "created": 1577432367.774797, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Transition time after 2nd cycle is correct (Content 0.15039491653442383 in [0.145 ... 0.155] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Transition time after 2nd cycle", + "0.15039491653442383", + "" + ], + "asctime": "2019-12-27 08:39:27,774", + "created": 1577432367.774447, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Transition time after 2nd cycle): 0.15039491653442383 ()", + "module": "test", + "msecs": 774.446964263916, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 409.3890190124512, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Transition time after 2nd cycle", + "0.145", + "0.155" + ], + "asctime": "2019-12-27 08:39:27,774", + "created": 1577432367.774644, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Transition time after 2nd cycle): 0.145 <= result <= 0.155", + "module": "test", + "msecs": 774.6438980102539, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 409.58595275878906, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 774.7969627380371, + "msg": "Transition time after 2nd cycle is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 409.73901748657227, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00015306472778320312 + }, + { + "args": [ + "0.22565913200378418", + "0.21999999999999997", + "0.22999999999999998", + "" + ], + "asctime": "2019-12-27 08:39:27,775", + "created": 1577432367.775311, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Previous state duration is correct (Content 0.22565913200378418 in [0.21999999999999997 ... 0.22999999999999998] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Previous state duration", + "0.22565913200378418", + "" + ], + "asctime": "2019-12-27 08:39:27,775", + "created": 1577432367.775022, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Previous state duration): 0.22565913200378418 ()", + "module": "test", + "msecs": 775.022029876709, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 409.96408462524414, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Previous state duration", + "0.21999999999999997", + "0.22999999999999998" + ], + "asctime": "2019-12-27 08:39:27,775", + "created": 1577432367.77517, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Previous state duration): 0.21999999999999997 <= result <= 0.22999999999999998", + "module": "test", + "msecs": 775.170087814331, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 410.1121425628662, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 775.3109931945801, + "msg": "Previous state duration is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 410.25304794311523, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00014090538024902344 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.38019299507141113, + "time_finished": "2019-12-27 08:39:27,775", + "time_start": "2019-12-27 08:39:27,395" + }, + "_iTFPQHcrEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.39294, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 25, + "message": "_iTFPQHcrEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 392.9400444030762, + "msg": "_iTFPQHcrEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.882099151611328, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393151, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_keyword_arguments", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 36, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393053, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 393.0530548095703, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.99510955810547, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 393.15104484558105, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.09309959411621, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 9.799003601074219e-05 + }, + { + "args": [ + "{'1': 1, '2': 'two'}", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393332, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_4 stored in state_machine is correct (Content {'1': 1, '2': 'two'} and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_4 stored in state_machine", + "{ '1': 1, '2': 'two' }", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393228, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_4 stored in state_machine): { '1': 1, '2': 'two' } ()", + "module": "test", + "msecs": 393.22805404663086, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.170108795166016, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_4 stored in state_machine", + "{ '1': 1, '2': 'two' }", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393274, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_4 stored in state_machine): result = { '1': 1, '2': 'two' } ()", + "module": "test", + "msecs": 393.27406883239746, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.216123580932617, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 393.33200454711914, + "msg": "Keyword argument kw_arg_no_4 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.274059295654297, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 5.793571472167969e-05 + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393533, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_1 stored in state_machine is correct (Content 1 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_1 stored in state_machine", + "1", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393438, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_1 stored in state_machine): 1 ()", + "module": "test", + "msecs": 393.43810081481934, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.380155563354492, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_1 stored in state_machine", + "1", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.39349, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_1 stored in state_machine): result = 1 ()", + "module": "test", + "msecs": 393.4900760650635, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.432130813598633, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 393.53299140930176, + "msg": "Keyword argument kw_arg_no_1 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.475046157836914, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.291534423828125e-05 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393671, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_3 stored in state_machine is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_3 stored in state_machine", + "True", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393594, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_3 stored in state_machine): True ()", + "module": "test", + "msecs": 393.59402656555176, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.536081314086914, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_3 stored in state_machine", + "True", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393632, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_3 stored in state_machine): result = True ()", + "module": "test", + "msecs": 393.6319351196289, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.573989868164062, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 393.67103576660156, + "msg": "Keyword argument kw_arg_no_3 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.61309051513672, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + }, + { + "args": [ + "'2'", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393815, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_2 stored in state_machine is correct (Content '2' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_2 stored in state_machine", + "'2'", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393731, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_2 stored in state_machine): '2' ()", + "module": "test", + "msecs": 393.73111724853516, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.673171997070312, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_2 stored in state_machine", + "'2'", + "" + ], + "asctime": "2019-12-27 08:39:27,393", + "created": 1577432367.393772, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_2 stored in state_machine): result = '2' ()", + "module": "test", + "msecs": 393.7718868255615, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.71394157409668, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 393.8150405883789, + "msg": "Keyword argument kw_arg_no_2 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 28.757095336914062, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.315376281738281e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0008749961853027344, + "time_finished": "2019-12-27 08:39:27,393", + "time_start": "2019-12-27 08:39:27,392" + }, + "_j2FvkHcqEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.39219, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 23, + "message": "_j2FvkHcqEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 392.18997955322266, + "msg": "_j2FvkHcqEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.132034301757812, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392308, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_last_transition", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 18, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392261, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 392.2610282897949, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.203083038330078, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 392.30799674987793, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.250051498413086, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.696846008300781e-05 + }, + { + "args": [ + "'__init__'", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392455, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Last transition condition after initialisation is correct (Content '__init__' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Last transition condition after initialisation", + "'__init__'", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392373, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Last transition condition after initialisation): '__init__' ()", + "module": "test", + "msecs": 392.37308502197266, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.315139770507812, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Last transition condition after initialisation", + "'__init__'", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392415, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Last transition condition after initialisation): result = '__init__' ()", + "module": "test", + "msecs": 392.41504669189453, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.357101440429688, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 392.4551010131836, + "msg": "Last transition condition after initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.39715576171875, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.00543212890625e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0002651214599609375, + "time_finished": "2019-12-27 08:39:27,392", + "time_start": "2019-12-27 08:39:27,392" + }, + "_tRZ50HcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,020", + "created": 1577432368.020105, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 33, + "message": "_tRZ50HcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 20.10488510131836, + "msg": "_tRZ50HcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 655.0469398498535, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,020", + "created": 1577432368.020569, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 16, + "message": "Initialising the state machine with state_c", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:28,020", + "created": 1577432368.020388, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 20.387887954711914, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 655.3299427032471, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 20.5690860748291, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 655.5111408233643, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0001811981201171875 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:28,021", + "created": 1577432368.021106, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of this_state() is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of this_state()", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:28,020", + "created": 1577432368.020805, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of this_state()): 'state_c' ()", + "module": "test", + "msecs": 20.804882049560547, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 655.7469367980957, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of this_state()", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:28,020", + "created": 1577432368.020957, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of this_state()): result = 'state_c' ()", + "module": "test", + "msecs": 20.956993103027344, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 655.8990478515625, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 21.10600471496582, + "msg": "Returnvalue of this_state() is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 656.048059463501, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00014901161193847656 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.001001119613647461, + "time_finished": "2019-12-27 08:39:28,021", + "time_start": "2019-12-27 08:39:28,020" + }, + "_vAtUQHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,021", + "created": 1577432368.021544, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 34, + "message": "_vAtUQHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 21.54397964477539, + "msg": "_vAtUQHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 656.4860343933105, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,021", + "created": 1577432368.021985, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state_is", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Initialising the state machine with state_c", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:28,021", + "created": 1577432368.021814, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 21.81410789489746, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 656.7561626434326, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 21.98505401611328, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 656.9271087646484, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0001709461212158203 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,022", + "created": 1577432368.022539, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of this_state_is(state_c) is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of this_state_is(state_c)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,022", + "created": 1577432368.022214, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of this_state_is(state_c)): True ()", + "module": "test", + "msecs": 22.21393585205078, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 657.1559906005859, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of this_state_is(state_c)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:28,022", + "created": 1577432368.022364, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of this_state_is(state_c)): result = True ()", + "module": "test", + "msecs": 22.363901138305664, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 657.3059558868408, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 22.53890037536621, + "msg": "Returnvalue of this_state_is(state_c) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 657.4809551239014, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00017499923706054688 + }, + { + "args": [ + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,023", + "created": 1577432368.023135, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of this_state_is(state_b) is correct (Content False and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of this_state_is(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,022", + "created": 1577432368.022832, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of this_state_is(state_b)): False ()", + "module": "test", + "msecs": 22.83191680908203, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 657.7739715576172, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of this_state_is(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:28,022", + "created": 1577432368.022976, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of this_state_is(state_b)): result = False ()", + "module": "test", + "msecs": 22.975921630859375, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 657.9179763793945, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 23.134946823120117, + "msg": "Returnvalue of this_state_is(state_b) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 658.0770015716553, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0001590251922607422 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0015909671783447266, + "time_finished": "2019-12-27 08:39:28,023", + "time_start": "2019-12-27 08:39:28,021" + }, + "_w49d4HcHEem_Z9BBpwIuJw": { + "args": null, + "asctime": "2019-12-27 08:39:27,391", + "created": 1577432367.391671, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 22, + "message": "_w49d4HcHEem_Z9BBpwIuJw", + "module": "__init__", + "moduleLogger": [], + "msecs": 391.67094230651855, + "msg": "_w49d4HcHEem_Z9BBpwIuJw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 26.61299705505371, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:27,391", + "created": 1577432367.391918, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 12, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:27,391", + "created": 1577432367.391857, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 391.8569087982178, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 26.79896354675293, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 391.9179439544678, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 26.85999870300293, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 6.103515625e-05 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392083, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after initialisation is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after initialisation", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,391", + "created": 1577432367.391991, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after initialisation): 'state_c' ()", + "module": "test", + "msecs": 391.99090003967285, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 26.932954788208008, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "State after initialisation", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:27,392", + "created": 1577432367.392037, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after initialisation): result = 'state_c' ()", + "module": "test", + "msecs": 392.03691482543945, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 26.97896957397461, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 392.08292961120605, + "msg": "State after initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 27.02498435974121, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 4.601478576660156e-05 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.0004119873046875, + "time_finished": "2019-12-27 08:39:27,392", + "time_start": "2019-12-27 08:39:27,391" + }, + "_yVA9oHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:28,023", + "created": 1577432368.023519, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 35, + "message": "_yVA9oHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 23.519039154052734, + "msg": "_yVA9oHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 658.4610939025879, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:28,274", + "created": 1577432368.274946, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 34, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:28,023", + "created": 1577432368.023783, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 23.782968521118164, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 658.7250232696533, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:28,024", + "created": 1577432368.024052, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 24.051904678344727, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 658.9939594268799, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + 0.25 + ], + "asctime": "2019-12-27 08:39:28,274", + "created": 1577432368.274591, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 33, + "message": "Waiting for 0.25s", + "module": "test_interface", + "msecs": 274.59096908569336, + "msg": "Waiting for %.2fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 909.5330238342285, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 274.9459743499756, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 909.8880290985107, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00035500526428222656 + }, + { + "args": [ + "0.2510838508605957", + "0.2", + "0.3", + "" + ], + "asctime": "2019-12-27 08:39:28,275", + "created": 1577432368.27571, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Return Value of this_state_duration() is correct (Content 0.2510838508605957 in [0.2 ... 0.3] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return Value of this_state_duration()", + "0.2510838508605957", + "" + ], + "asctime": "2019-12-27 08:39:28,275", + "created": 1577432368.275321, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return Value of this_state_duration()): 0.2510838508605957 ()", + "module": "test", + "msecs": 275.32100677490234, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 910.2630615234375, + "thread": 140570112038720, + "threadName": "MainThread" + }, + { + "args": [ + "Return Value of this_state_duration()", + "0.2", + "0.3" + ], + "asctime": "2019-12-27 08:39:28,275", + "created": 1577432368.275517, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Return Value of this_state_duration()): 0.2 <= result <= 0.3", + "module": "test", + "msecs": 275.5169868469238, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 910.459041595459, + "thread": 140570112038720, + "threadName": "MainThread" + } + ], + "msecs": 275.7101058959961, + "msg": "Return Value of this_state_duration() is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8622, + "processName": "MainProcess", + "relativeCreated": 910.6521606445312, + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.00019311904907226562 + } + ], + "thread": 140570112038720, + "threadName": "MainThread", + "time_consumption": 0.25219106674194336, + "time_finished": "2019-12-27 08:39:28,275", + "time_start": "2019-12-27 08:39:28,023" + } + }, + "testrun_id": "p2", + "time_consumption": 1.6532673835754395, + "uid_list_sorted": [ + "_w49d4HcHEem_Z9BBpwIuJw", + "_j2FvkHcqEemrUqotql_Blw", + "_bDqbMHcrEemrUqotql_Blw", + "_iTFPQHcrEemrUqotql_Blw", + "_P7R34HczEemrUqotql_Blw", + "_fE3tMHczEemrUqotql_Blw", + "_C0Vi0HgPEemBsuKWG645TA", + "_tRZ50HcyEemrUqotql_Blw", + "_vAtUQHcyEemrUqotql_Blw", + "_yVA9oHcyEemrUqotql_Blw", + "_1WGwEHcyEemrUqotql_Blw", + "_7Mq60HcyEemrUqotql_Blw", + "_-kytMHcyEemrUqotql_Blw", + "_AcYg8HczEemrUqotql_Blw", + "_GeMSYHczEemrUqotql_Blw", + "_XzMFcHYZEem_kd-7nxt1sg", + "_YrdgQHbUEemIm_1APUisDQ", + "_b_t78Hb4EemzkK7kGUMNfw", + "_e4QPUHb4EemzkK7kGUMNfw" + ] + }, + { + "heading_dict": { + "_-kytMHcyEemrUqotql_Blw": "Previous State", + "_1WGwEHcyEemrUqotql_Blw": "Last Transition Condition", + "_7Mq60HcyEemrUqotql_Blw": "Last Transition Condition was", + "_AcYg8HczEemrUqotql_Blw": "Previous State was", + "_AtENoHb5EemzkK7kGUMNfw": "Module Initialisation", + "_C0Vi0HgPEemBsuKWG645TA": "Transitionpriorisation", + "_GeMSYHczEemrUqotql_Blw": "Previous State Duration", + "_MR7eOHYYEem_kd-7nxt1sg": "Transition Callbacks", + "_N_VvoHczEemrUqotql_Blw": "Transition Changes", + "_P7R34HczEemrUqotql_Blw": "Transitiondefinition and -flow", + "_RnPZgHcqEemrUqotql_Blw": "Module Interface", + "_XzMFcHYZEem_kd-7nxt1sg": "State change callback for a defined transition and targetstate", + "_YrdgQHbUEemIm_1APUisDQ": "State change callback for a defined transition", + "_bDqbMHcrEemrUqotql_Blw": "Default Previous State", + "_b_t78Hb4EemzkK7kGUMNfw": "State change callback for a defined targetstate", + "_e4QPUHb4EemzkK7kGUMNfw": "State change callback for all kind of state changes", + "_fE3tMHczEemrUqotql_Blw": "Transitiontiming", + "_iTFPQHcrEemrUqotql_Blw": "Additional Keyword Arguments", + "_j2FvkHcqEemrUqotql_Blw": "Default Last Transition Condtion", + "_tRZ50HcyEemrUqotql_Blw": "This State", + "_vAtUQHcyEemrUqotql_Blw": "This State is", + "_w49d4HcHEem_Z9BBpwIuJw": "Default State", + "_yVA9oHcyEemrUqotql_Blw": "This State Duration" + }, + "interpreter": "python 3.6.9 (final)", + "name": "Default Testsession name", + "number_of_failed_tests": 0, + "number_of_possibly_failed_tests": 0, + "number_of_successfull_tests": 19, + "number_of_tests": 19, + "testcase_execution_level": 90, + "testcase_names": { + "0": "Single Test", + "10": "Smoke Test (Minumum subset)", + "50": "Short Test (Subset)", + "90": "Full Test (all defined tests)" + }, + "testcases": { + "_-kytMHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,313", + "created": 1577432370.3136415, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 38, + "message": "_-kytMHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 313.6415481567383, + "msg": "_-kytMHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 947.6540088653564, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,314", + "created": 1577432370.3146026, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 56, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:30,314", + "created": 1577432370.3140066, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 314.0065670013428, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 948.0190277099609, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:30,314", + "created": 1577432370.314399, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 314.39900398254395, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 948.4114646911621, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 314.6026134490967, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 948.6150741577148, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00020360946655273438 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:30,315", + "created": 1577432370.3150625, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of previous_state() is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of previous_state()", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:30,314", + "created": 1577432370.314794, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of previous_state()): 'state_a' ()", + "module": "test", + "msecs": 314.79406356811523, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 948.8065242767334, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of previous_state()", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:30,314", + "created": 1577432370.3149292, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of previous_state()): result = 'state_a' ()", + "module": "test", + "msecs": 314.9292469024658, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 948.941707611084, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 315.0625228881836, + "msg": "Returnvalue of previous_state() is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 949.0749835968018, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00013327598571777344 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0014209747314453125, + "time_finished": "2019-12-27 08:39:30,315", + "time_start": "2019-12-27 08:39:30,313" + }, + "_1WGwEHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,310", + "created": 1577432370.3104317, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 36, + "message": "_1WGwEHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 310.43171882629395, + "msg": "_1WGwEHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 944.4441795349121, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,311", + "created": 1577432370.311048, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_last_transition_condition", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 41, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:30,310", + "created": 1577432370.3106396, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 310.6396198272705, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 944.6520805358887, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:30,310", + "created": 1577432370.3108752, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 310.87517738342285, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 944.887638092041, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 311.0480308532715, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 945.0604915618896, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001728534698486328 + }, + { + "args": [ + "'condition_a'", + "" + ], + "asctime": "2019-12-27 08:39:30,311", + "created": 1577432370.3115034, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of last_transition_condition() is correct (Content 'condition_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of last_transition_condition()", + "'condition_a'", + "" + ], + "asctime": "2019-12-27 08:39:30,311", + "created": 1577432370.3112295, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of last_transition_condition()): 'condition_a' ()", + "module": "test", + "msecs": 311.2294673919678, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 945.2419281005859, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of last_transition_condition()", + "'condition_a'", + "" + ], + "asctime": "2019-12-27 08:39:30,311", + "created": 1577432370.3113713, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of last_transition_condition()): result = 'condition_a' ()", + "module": "test", + "msecs": 311.3713264465332, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 945.3837871551514, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 311.50341033935547, + "msg": "Returnvalue of last_transition_condition() is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 945.5158710479736, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00013208389282226562 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0010716915130615234, + "time_finished": "2019-12-27 08:39:30,311", + "time_start": "2019-12-27 08:39:30,310" + }, + "_7Mq60HcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,311", + "created": 1577432370.311778, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 37, + "message": "_7Mq60HcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 311.77806854248047, + "msg": "_7Mq60HcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 945.7905292510986, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,312", + "created": 1577432370.3123403, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_last_transition_condition_was", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 48, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:30,311", + "created": 1577432370.3119798, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 311.9797706604004, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 945.9922313690186, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:30,312", + "created": 1577432370.3121927, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 312.1926784515381, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 946.2051391601562, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 312.34025955200195, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 946.3527202606201, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001475811004638672 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,312", + "created": 1577432370.3127732, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of last_transition_condition(condition_a) is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of last_transition_condition(condition_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,312", + "created": 1577432370.3125148, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of last_transition_condition(condition_a)): True ()", + "module": "test", + "msecs": 312.5147819519043, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 946.5272426605225, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of last_transition_condition(condition_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,312", + "created": 1577432370.3126442, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of last_transition_condition(condition_a)): result = True ()", + "module": "test", + "msecs": 312.64424324035645, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 946.6567039489746, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 312.7732276916504, + "msg": "Returnvalue of last_transition_condition(condition_a) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 946.7856884002686, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001289844512939453 + }, + { + "args": [ + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,313", + "created": 1577432370.313216, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of last_transition_condition(condition_c) is correct (Content False and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of last_transition_condition(condition_c)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,312", + "created": 1577432370.3129528, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of last_transition_condition(condition_c)): False ()", + "module": "test", + "msecs": 312.95275688171387, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 946.965217590332, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of last_transition_condition(condition_c)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,313", + "created": 1577432370.3130782, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of last_transition_condition(condition_c)): result = False ()", + "module": "test", + "msecs": 313.0781650543213, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 947.0906257629395, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 313.215970993042, + "msg": "Returnvalue of last_transition_condition(condition_c) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 947.2284317016602, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00013780593872070312 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0014379024505615234, + "time_finished": "2019-12-27 08:39:30,313", + "time_start": "2019-12-27 08:39:30,311" + }, + "_AcYg8HczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,315", + "created": 1577432370.3153374, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 39, + "message": "_AcYg8HczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 315.3374195098877, + "msg": "_AcYg8HczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 949.3498802185059, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,315", + "created": 1577432370.3159027, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state_was", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 63, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:30,315", + "created": 1577432370.315546, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 315.54603576660156, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 949.5584964752197, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:30,315", + "created": 1577432370.315759, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 315.75894355773926, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 949.7714042663574, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 315.9027099609375, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 949.9151706695557, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001437664031982422 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,316", + "created": 1577432370.3163733, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of previous_state_was(state_a) is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of previous_state_was(state_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,316", + "created": 1577432370.3160865, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of previous_state_was(state_a)): True ()", + "module": "test", + "msecs": 316.0865306854248, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 950.098991394043, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of previous_state_was(state_a)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,316", + "created": 1577432370.3162358, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of previous_state_was(state_a)): result = True ()", + "module": "test", + "msecs": 316.2357807159424, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 950.2482414245605, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 316.373348236084, + "msg": "Returnvalue of previous_state_was(state_a) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 950.3858089447021, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00013756752014160156 + }, + { + "args": [ + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,316", + "created": 1577432370.316803, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of previous_state_was(state_b) is correct (Content False and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of previous_state_was(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,316", + "created": 1577432370.3165455, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of previous_state_was(state_b)): False ()", + "module": "test", + "msecs": 316.5454864501953, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 950.5579471588135, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of previous_state_was(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,316", + "created": 1577432370.3166702, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of previous_state_was(state_b)): result = False ()", + "module": "test", + "msecs": 316.67017936706543, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 950.6826400756836, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 316.802978515625, + "msg": "Returnvalue of previous_state_was(state_b) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 950.8154392242432, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001327991485595703 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0014655590057373047, + "time_finished": "2019-12-27 08:39:30,316", + "time_start": "2019-12-27 08:39:30,315" + }, + "_C0Vi0HgPEemBsuKWG645TA": { + "args": null, + "asctime": "2019-12-27 08:39:29,811", + "created": 1577432369.8114681, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 30, + "message": "_C0Vi0HgPEemBsuKWG645TA", + "module": "__init__", + "moduleLogger": [], + "msecs": 811.4681243896484, + "msg": "_C0Vi0HgPEemBsuKWG645TA", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 445.4805850982666, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + 0.151, + 0.15 + ], + "asctime": "2019-12-27 08:39:29,811", + "created": 1577432369.8119576, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 136, + "message": "Initialising state machine with state_a, a transition to state_b after 0.151s and a transition to state_c after 0.150s", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,811", + "created": 1577432369.8117712, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 811.7711544036865, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 445.7836151123047, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 811.957597732544, + "msg": "Initialising state machine with state_a, a transition to state_b after %.03fs and a transition to state_c after %.03fs", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 445.9700584411621, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00018644332885742188 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,812", + "created": 1577432369.8124208, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Initial state after Initialisation is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,812", + "created": 1577432369.8121576, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Initial state after Initialisation): 'state_a' ()", + "module": "test", + "msecs": 812.1576309204102, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 446.1700916290283, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,812", + "created": 1577432369.8122902, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Initial state after Initialisation): result = 'state_a' ()", + "module": "test", + "msecs": 812.2901916503906, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 446.3026523590088, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 812.4208450317383, + "msg": "Initial state after Initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 446.43330574035645, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00013065338134765625 + }, + { + "args": [ + 0.3 + ], + "asctime": "2019-12-27 08:39:30,054", + "created": 1577432370.0545423, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 144, + "message": "Waiting for 0.300s or state change", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + 1.1920928955078125e-05 + ], + "asctime": "2019-12-27 08:39:29,812", + "created": 1577432369.8125877, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.000s", + "module": "test_transitions", + "msecs": 812.5877380371094, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 446.60019874572754, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 0.06035161018371582 + ], + "asctime": "2019-12-27 08:39:29,872", + "created": 1577432369.8729553, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.060s", + "module": "test_transitions", + "msecs": 872.955322265625, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 506.96778297424316, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 0.12079405784606934 + ], + "asctime": "2019-12-27 08:39:29,933", + "created": 1577432369.9334145, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.121s", + "module": "test_transitions", + "msecs": 933.4144592285156, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 567.4269199371338, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 0.18122267723083496 + ], + "asctime": "2019-12-27 08:39:29,993", + "created": 1577432369.9938357, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "priorisation", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 141, + "message": "Executing method work after 0.181s", + "module": "test_transitions", + "msecs": 993.8356876373291, + "msg": "Executing method work after %.03fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 627.8481483459473, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_a'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,994", + "created": 1577432369.9941728, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_a' -> 'state_c'", + "module": "__init__", + "msecs": 994.1728115081787, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 628.1852722167969, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 54.54230308532715, + "msg": "Waiting for %.3fs or state change", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 688.5547637939453, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.06036949157714844 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:30,055", + "created": 1577432370.055215, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 1st cycle is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 1st cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:30,054", + "created": 1577432370.0548913, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 1st cycle): 'state_c' ()", + "module": "test", + "msecs": 54.891347885131836, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 688.90380859375, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after 1st cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:30,055", + "created": 1577432370.055063, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 1st cycle): result = 'state_c' ()", + "module": "test", + "msecs": 55.06300926208496, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 689.0754699707031, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 55.214881896972656, + "msg": "State after 1st cycle is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 689.2273426055908, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001518726348876953 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.24374675750732422, + "time_finished": "2019-12-27 08:39:30,055", + "time_start": "2019-12-27 08:39:29,811" + }, + "_GeMSYHczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,317", + "created": 1577432370.3170915, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 40, + "message": "_GeMSYHczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 317.0914649963379, + "msg": "_GeMSYHczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 951.103925704956, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:31,068", + "created": 1577432371.0688076, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 76, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:30,317", + "created": 1577432370.3172853, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 317.28529930114746, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 951.2977600097656, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:30,317", + "created": 1577432370.3174534, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 317.45338439941406, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 951.4658451080322, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 0.75 + ], + "asctime": "2019-12-27 08:39:30,317", + "created": 1577432370.317501, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_previous_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 73, + "message": "Waiting for 0.75s", + "module": "test_interface", + "msecs": 317.5010681152344, + "msg": "Waiting for %.2fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 951.5135288238525, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,068", + "created": 1577432371.0685246, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 68.52459907531738, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1702.5370597839355, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 68.80760192871094, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1702.820062637329, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0002830028533935547 + }, + { + "args": [ + "0.7512595653533936", + "0.7", + "0.8", + "" + ], + "asctime": "2019-12-27 08:39:31,069", + "created": 1577432371.069427, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Return Value of previous_state_duration() is correct (Content 0.7512595653533936 in [0.7 ... 0.8] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return Value of previous_state_duration()", + "0.7512595653533936", + "" + ], + "asctime": "2019-12-27 08:39:31,069", + "created": 1577432371.0690796, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return Value of previous_state_duration()): 0.7512595653533936 ()", + "module": "test", + "msecs": 69.07963752746582, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1703.092098236084, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Return Value of previous_state_duration()", + "0.7", + "0.8" + ], + "asctime": "2019-12-27 08:39:31,069", + "created": 1577432371.0692496, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Return Value of previous_state_duration()): 0.7 <= result <= 0.8", + "module": "test", + "msecs": 69.24962997436523, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1703.2620906829834, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 69.4270133972168, + "msg": "Return Value of previous_state_duration() is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1703.439474105835, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001773834228515625 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.7523355484008789, + "time_finished": "2019-12-27 08:39:31,069", + "time_start": "2019-12-27 08:39:30,317" + }, + "_P7R34HczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429698, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 28, + "message": "_P7R34HczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 429.69799041748047, + "msg": "_P7R34HczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.71045112609863, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429824, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 44, + "message": "Initialising state machine with state_a", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4297793, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 429.7792911529541, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.791751861572266, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.8241138458252, + "msg": "Initialising state machine with state_a", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.83657455444336, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.482269287109375e-05 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.42994, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Initial state after Initialisation is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429871, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Initial state after Initialisation): 'state_a' ()", + "module": "test", + "msecs": 429.8710823059082, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.88354301452637, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429906, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Initial state after Initialisation): result = 'state_a' ()", + "module": "test", + "msecs": 429.90589141845703, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.918352127075195, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.93998527526855, + "msg": "Initial state after Initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.95244598388672, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.409385681152344e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.430037, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 47, + "message": "Work routine executed the 1st time to do the state change. Defined Transitions are: True->state_b (0.0s); False->state_c (0.0s)", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429998, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 429.99792098999023, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.0103816986084, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.0370216369629, + "msg": "Work routine executed the 1st time to do the state change. Defined Transitions are: True->state_b (0.0s); False->state_c (0.0s)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.04948234558105, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + }, + { + "args": [ + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4301498, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 1st execution of work method is correct (Content 'state_b' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 1st execution of work method", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4300807, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 1st execution of work method): 'state_b' ()", + "module": "test", + "msecs": 430.0806522369385, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.09311294555664, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after 1st execution of work method", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.430114, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 1st execution of work method): result = 'state_b' ()", + "module": "test", + "msecs": 430.1140308380127, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.12649154663086, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.14979362487793, + "msg": "State after 1st execution of work method is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.1622543334961, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.5762786865234375e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4302402, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 50, + "message": "Work routine executed the 2nd time to do the state change. Defined Transitions are: False->state_a (0.0s); True->state_c (0.0s)", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4302025, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 430.2024841308594, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.21494483947754, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.2401542663574, + "msg": "Work routine executed the 2nd time to do the state change. Defined Transitions are: False->state_a (0.0s); True->state_c (0.0s)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.25261497497559, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.7670135498046875e-05 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4303534, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 2nd execution of work method is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 2nd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.430284, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 2nd execution of work method): 'state_c' ()", + "module": "test", + "msecs": 430.2840232849121, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.29648399353027, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after 2nd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4303195, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 2nd execution of work method): result = 'state_c' ()", + "module": "test", + "msecs": 430.31954765319824, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.3320083618164, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.35340309143066, + "msg": "State after 2nd execution of work method is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.36586380004883, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.3855438232421875e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4304166, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "transitions", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 53, + "message": "Work routine executed the 3rd time with no effect. No Transitions starting from state_c (dead end)", + "module": "test_transitions", + "moduleLogger": [], + "msecs": 430.4165840148926, + "msg": "Work routine executed the 3rd time with no effect. No Transitions starting from state_c (dead end)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.42904472351074, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4305265, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 3rd execution of work method is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 3rd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4304605, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 3rd execution of work method): 'state_c' ()", + "module": "test", + "msecs": 430.46045303344727, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.47291374206543, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after 3rd execution of work method", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4304934, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 3rd execution of work method): result = 'state_c' ()", + "module": "test", + "msecs": 430.4933547973633, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.50581550598145, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.5264949798584, + "msg": "State after 3rd execution of work method is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.53895568847656, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.314018249511719e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0008285045623779297, + "time_finished": "2019-12-27 08:39:29,430", + "time_start": "2019-12-27 08:39:29,429" + }, + "_XzMFcHYZEem_kd-7nxt1sg": { + "args": null, + "asctime": "2019-12-27 08:39:31,069", + "created": 1577432371.069738, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 43, + "message": "_XzMFcHYZEem_kd-7nxt1sg", + "module": "__init__", + "moduleLogger": [], + "msecs": 69.73791122436523, + "msg": "_XzMFcHYZEem_kd-7nxt1sg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1703.7503719329834, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:31,072", + "created": 1577432371.072766, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,069", + "created": 1577432371.0699704, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 69.97036933898926, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1703.9828300476074, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:31,070", + "created": 1577432371.0702002, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 70.20020484924316, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1704.2126655578613, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,071", + "created": 1577432371.0712972, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 71.29716873168945, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1705.3096294403076, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:31,071", + "created": 1577432371.071477, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 2 caused by callback_execution", + "module": "test_callbacks", + "msecs": 71.47693634033203, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1705.4893970489502, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:31,071", + "created": 1577432371.0716345, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 71.63453102111816, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1705.6469917297363, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:31,071", + "created": 1577432371.0717874, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 4 caused by sequence progress", + "module": "test_callbacks", + "msecs": 71.78735733032227, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1705.7998180389404, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,071", + "created": 1577432371.0719836, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 71.98357582092285, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1705.996036529541, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:31,072", + "created": 1577432371.072143, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 5 caused by sequence progress", + "module": "test_callbacks", + "msecs": 72.1430778503418, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1706.15553855896, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,072", + "created": 1577432371.0723133, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 72.31330871582031, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1706.3257694244385, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:31,072", + "created": 1577432371.0724595, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 6 caused by sequence progress", + "module": "test_callbacks", + "msecs": 72.45945930480957, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1706.4719200134277, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:31,072", + "created": 1577432371.0726268, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 72.62682914733887, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1706.639289855957, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 72.76606559753418, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1706.7785263061523, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001392364501953125 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,073", + "created": 1577432371.0736756, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number", + "[ 1 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,072", + "created": 1577432371.0729778, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number): [ 1 ] ()", + "module": "test", + "msecs": 72.97778129577637, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1706.9902420043945, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number", + "[ 1 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,073", + "created": 1577432371.0731244, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number): result = [ 1 ] ()", + "module": "test", + "msecs": 73.12440872192383, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1707.136869430542, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,073", + "created": 1577432371.0732653, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 1 ()", + "module": "test", + "msecs": 73.26531410217285, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1707.277774810791, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,073", + "created": 1577432371.0734253, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 1 ()", + "module": "test", + "msecs": 73.42529296875, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1707.4377536773682, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,073", + "created": 1577432371.0735555, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 1 and Type is ).", + "module": "test", + "msecs": 73.55546951293945, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1707.5679302215576, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 73.67563247680664, + "msg": "Execution of state machine callback (1) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1707.6880931854248, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001201629638671875 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,074", + "created": 1577432371.0745146, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number", + "[ 2 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,073", + "created": 1577432371.073858, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number): [ 2 ] ()", + "module": "test", + "msecs": 73.85802268981934, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1707.8704833984375, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number", + "[ 2 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,074", + "created": 1577432371.074003, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number): result = [ 2 ] ()", + "module": "test", + "msecs": 74.00298118591309, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1708.0154418945312, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,074", + "created": 1577432371.0741384, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 74.13840293884277, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1708.150863647461, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,074", + "created": 1577432371.0742576, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 74.25761222839355, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1708.2700729370117, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,074", + "created": 1577432371.0743804, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 74.38039779663086, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1708.392858505249, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 74.51462745666504, + "msg": "Execution of state machine callback (2) (state_b, condition_a) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1708.5270881652832, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001342296600341797 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.004776716232299805, + "time_finished": "2019-12-27 08:39:31,074", + "time_start": "2019-12-27 08:39:31,069" + }, + "_YrdgQHbUEemIm_1APUisDQ": { + "args": null, + "asctime": "2019-12-27 08:39:31,074", + "created": 1577432371.0748174, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 44, + "message": "_YrdgQHbUEemIm_1APUisDQ", + "module": "__init__", + "moduleLogger": [], + "msecs": 74.81741905212402, + "msg": "_YrdgQHbUEemIm_1APUisDQ", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1708.8298797607422, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0770817, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,075", + "created": 1577432371.0750227, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 75.02269744873047, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1709.0351581573486, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:31,075", + "created": 1577432371.075228, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 75.22797584533691, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1709.240436553955, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,075", + "created": 1577432371.075445, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 75.44493675231934, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1709.4573974609375, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:31,075", + "created": 1577432371.0756001, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 2 caused by sequence progress", + "module": "test_callbacks", + "msecs": 75.60014724731445, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1709.6126079559326, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,075", + "created": 1577432371.0757782, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 75.77824592590332, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1709.7907066345215, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:31,075", + "created": 1577432371.0759184, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 75.91843605041504, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1709.9308967590332, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.0760555, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 4 caused by callback_execution", + "module": "test_callbacks", + "msecs": 76.05552673339844, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.0679874420166, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.0761917, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 5 caused by sequence progress", + "module": "test_callbacks", + "msecs": 76.19166374206543, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.2041244506836, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.0763571, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 76.35712623596191, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.36958694458, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.076504, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 6 caused by callback_execution", + "module": "test_callbacks", + "msecs": 76.50399208068848, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.5164527893066, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 7 + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.0766468, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 7 caused by callback_execution", + "module": "test_callbacks", + "msecs": 76.64680480957031, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.6592655181885, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 8 + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.076783, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 8 caused by sequence progress", + "module": "test_callbacks", + "msecs": 76.7829418182373, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.7954025268555, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:31,076", + "created": 1577432371.0769446, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 76.94458961486816, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1710.9570503234863, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 77.08168029785156, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.0941410064697, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00013709068298339844 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0777125, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number", + "[ 2, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0772836, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number): [ 2, 5 ] ()", + "module": "test", + "msecs": 77.28362083435059, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.2960815429688, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number", + "[ 2, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0774257, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number): result = [ 2, 5 ] ()", + "module": "test", + "msecs": 77.42571830749512, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.4381790161133, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.077471, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 77.47101783752441, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.4834785461426, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0775104, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 77.51035690307617, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.5228176116943, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0775504, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 77.55041122436523, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.5628719329834, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0775907, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 5 ()", + "module": "test", + "msecs": 77.5907039642334, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.6031646728516, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0776289, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 5 ()", + "module": "test", + "msecs": 77.62885093688965, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.6413116455078, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.077672, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 5 and Type is ).", + "module": "test", + "msecs": 77.67200469970703, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.6844654083252, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 77.7125358581543, + "msg": "Execution of state machine callback (1) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.7249965667725, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.0531158447265625e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0780897, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number", + "[ 3, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.077773, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number): [ 3, 6 ] ()", + "module": "test", + "msecs": 77.7730941772461, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.7855548858643, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number", + "[ 3, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.077818, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number): result = [ 3, 6 ] ()", + "module": "test", + "msecs": 77.81791687011719, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.8303775787354, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "3", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.07786, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 3 ()", + "module": "test", + "msecs": 77.86011695861816, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.8725776672363, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "3", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0778985, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 3 ()", + "module": "test", + "msecs": 77.89850234985352, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.9109630584717, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "3", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0779374, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 3 and Type is ).", + "module": "test", + "msecs": 77.93736457824707, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.9498252868652, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:31,077", + "created": 1577432371.0779774, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 6 ()", + "module": "test", + "msecs": 77.97741889953613, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1711.9898796081543, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0780146, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 6 ()", + "module": "test", + "msecs": 78.01461219787598, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.0270729064941, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "6", + "" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0780523, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 6 and Type is ).", + "module": "test", + "msecs": 78.05228233337402, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.0647430419922, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 78.08971405029297, + "msg": "Execution of state machine callback (2) (all_transitions, condition_b) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.1021747589111, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.743171691894531e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0032722949981689453, + "time_finished": "2019-12-27 08:39:31,078", + "time_start": "2019-12-27 08:39:31,074" + }, + "_bDqbMHcrEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.428712, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 24, + "message": "_bDqbMHcrEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 428.7118911743164, + "msg": "_bDqbMHcrEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.72435188293457, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4288065, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_last_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4287667, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 428.76672744750977, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.77918815612793, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 428.8065433502197, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.81900405883789, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.981590270996094e-05 + }, + { + "args": [ + "None", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4289205, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Last state after initialisation is correct (Content None and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Last state after initialisation", + "None", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4288516, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Last state after initialisation): None ()", + "module": "test", + "msecs": 428.8516044616699, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.864065170288086, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Last state after initialisation", + "None", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4288864, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Last state after initialisation): result = None ()", + "module": "test", + "msecs": 428.88641357421875, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.898874282836914, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 428.9205074310303, + "msg": "Last state after initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.93296813964844, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.409385681152344e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0002086162567138672, + "time_finished": "2019-12-27 08:39:29,428", + "time_start": "2019-12-27 08:39:29,428" + }, + "_b_t78Hb4EemzkK7kGUMNfw": { + "args": null, + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0781896, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 45, + "message": "_b_t78Hb4EemzkK7kGUMNfw", + "module": "__init__", + "moduleLogger": [], + "msecs": 78.18961143493652, + "msg": "_b_t78Hb4EemzkK7kGUMNfw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.2020721435547, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0789227, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0782554, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 78.25541496276855, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.2678756713867, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.078321, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 78.32098007202148, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.3334407806396, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0783873, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 78.38726043701172, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.3997211456299, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.078437, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 2 caused by callback_execution", + "module": "test_callbacks", + "msecs": 78.43708992004395, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.449550628662, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0784826, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 78.48262786865234, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.4950885772705, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.07853, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 4 caused by sequence progress", + "module": "test_callbacks", + "msecs": 78.53007316589355, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.5425338745117, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.078586, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 78.58610153198242, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.5985622406006, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.078632, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 5 caused by sequence progress", + "module": "test_callbacks", + "msecs": 78.63211631774902, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.6445770263672, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0786858, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 78.68576049804688, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.698221206665, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.078732, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 6 caused by callback_execution", + "module": "test_callbacks", + "msecs": 78.73201370239258, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.7444744110107, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 7 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0787756, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 7 caused by callback_execution", + "module": "test_callbacks", + "msecs": 78.77564430236816, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.7881050109863, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 8 + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0788205, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 8 caused by sequence progress", + "module": "test_callbacks", + "msecs": 78.82046699523926, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.8329277038574, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0788772, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 78.87721061706543, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.8896713256836, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 78.92274856567383, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1712.935209274292, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.553794860839844e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0792754, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number", + "[ 1, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,078", + "created": 1577432371.0789926, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number): [ 1, 5 ] ()", + "module": "test", + "msecs": 78.99260520935059, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.0050659179688, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number", + "[ 1, 5 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079033, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number): result = [ 1, 5 ] ()", + "module": "test", + "msecs": 79.03289794921875, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.045358657837, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0790696, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 1 ()", + "module": "test", + "msecs": 79.06961441040039, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.0820751190186, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0791054, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 1 ()", + "module": "test", + "msecs": 79.10537719726562, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.1178379058838, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079139, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 1 and Type is ).", + "module": "test", + "msecs": 79.13899421691895, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.151454925537, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0791752, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 5 ()", + "module": "test", + "msecs": 79.17523384094238, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.1876945495605, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0792093, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 5 ()", + "module": "test", + "msecs": 79.2093276977539, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.221788406372, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0792441, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 5 and Type is ).", + "module": "test", + "msecs": 79.24413681030273, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.256597518921, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 79.27536964416504, + "msg": "Execution of state machine callback (1) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.2878303527832, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.123283386230469e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079586, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number", + "[ 2, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0793242, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number): [ 2, 6 ] ()", + "module": "test", + "msecs": 79.32424545288086, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.336706161499, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number", + "[ 2, 6 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0793598, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number): result = [ 2, 6 ] ()", + "module": "test", + "msecs": 79.35976982116699, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.3722305297852, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079394, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 79.39410209655762, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.4065628051758, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079425, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 79.42509651184082, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.437557220459, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0794601, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 79.46014404296875, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.472604751587, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0794928, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 6 ()", + "module": "test", + "msecs": 79.49280738830566, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.5052680969238, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "6", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079524, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 6 ()", + "module": "test", + "msecs": 79.52404022216797, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.5365009307861, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "6", + "" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0795557, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 6 and Type is ).", + "module": "test", + "msecs": 79.55574989318848, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.5682106018066, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 79.58602905273438, + "msg": "Execution of state machine callback (2) (state_b, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.5984897613525, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.0279159545898438e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0013964176177978516, + "time_finished": "2019-12-27 08:39:31,079", + "time_start": "2019-12-27 08:39:31,078" + }, + "_e4QPUHb4EemzkK7kGUMNfw": { + "args": null, + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0796647, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 46, + "message": "_e4QPUHb4EemzkK7kGUMNfw", + "module": "__init__", + "moduleLogger": [], + "msecs": 79.66470718383789, + "msg": "_e4QPUHb4EemzkK7kGUMNfw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.677167892456, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.080398, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 58, + "message": "Running state machine sequence and storing sequence number for each callback", + "module": "test_callbacks", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0797205, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 79.72049713134766, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.7329578399658, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 1 + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0797708, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 1 caused by sequence progress", + "module": "test_callbacks", + "msecs": 79.77080345153809, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.7832641601562, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079825, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 79.82492446899414, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.8373851776123, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 2 + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079862, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 2 caused by callback_execution", + "module": "test_callbacks", + "msecs": 79.86211776733398, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.8745784759521, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 3 + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0798988, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 3 caused by callback_execution", + "module": "test_callbacks", + "msecs": 79.89883422851562, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.9112949371338, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 4 + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.0799377, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 4 caused by sequence progress", + "module": "test_callbacks", + "msecs": 79.93769645690918, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.9501571655273, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_b'", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:31,079", + "created": 1577432371.079983, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_b' -> 'state_a'", + "module": "__init__", + "msecs": 79.98299598693848, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1713.9954566955566, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 5 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0800183, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 5 caused by callback_execution", + "module": "test_callbacks", + "msecs": 80.01828193664551, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.0307426452637, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 6 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0800533, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 6 caused by callback_execution", + "module": "test_callbacks", + "msecs": 80.05332946777344, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.0657901763916, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 7 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0800962, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 7 caused by sequence progress", + "module": "test_callbacks", + "msecs": 80.09624481201172, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.1087055206299, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_b'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0801404, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_b'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 80.14035224914551, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.1528129577637, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 8 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0801747, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 8 caused by callback_execution", + "module": "test_callbacks", + "msecs": 80.17468452453613, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.1871452331543, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 9 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0802093, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 9 caused by callback_execution", + "module": "test_callbacks", + "msecs": 80.20925521850586, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.221715927124, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 10 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0802464, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "test_callbacks", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 55, + "message": "Increasing sequence number to 10 caused by sequence progress", + "module": "test_callbacks", + "msecs": 80.2464485168457, + "msg": "Increasing sequence number to %d caused by sequence progress", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.2589092254639, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_c'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0802896, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_c'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 80.28960227966309, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.3020629882812, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 11 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0803237, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 11 caused by callback_execution", + "module": "test_callbacks", + "msecs": 80.32369613647461, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.3361568450928, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 12 + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.080358, + "exc_info": null, + "exc_text": null, + "filename": "test_callbacks.py", + "funcName": "exec_with_counter", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 24, + "message": "Increasing sequence number to 12 caused by callback_execution", + "module": "test_callbacks", + "msecs": 80.35802841186523, + "msg": "Increasing sequence number to %d caused by callback_execution", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.3704891204834, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 80.3980827331543, + "msg": "Running state machine sequence and storing sequence number for each callback", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_callbacks.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.4105434417725, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.00543212890625e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0809586, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number", + "[ 1, 4, 7, 10 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0804546, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number): [ 1, 4, 7, 10 ] ()", + "module": "test", + "msecs": 80.45458793640137, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.4670486450195, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number", + "[ 1, 4, 7, 10 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0804942, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number): result = [ 1, 4, 7, 10 ] ()", + "module": "test", + "msecs": 80.49416542053223, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.5066261291504, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0805306, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 1 ()", + "module": "test", + "msecs": 80.53064346313477, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.543104171753, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0805657, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 1 ()", + "module": "test", + "msecs": 80.5656909942627, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.5781517028809, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0805993, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 1 and Type is ).", + "module": "test", + "msecs": 80.59930801391602, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.6117687225342, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "4", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0806515, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 4 ()", + "module": "test", + "msecs": 80.65152168273926, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.6639823913574, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "4", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.080699, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 4 ()", + "module": "test", + "msecs": 80.69896697998047, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.7114276885986, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "4", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0807319, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 4 and Type is ).", + "module": "test", + "msecs": 80.73186874389648, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.7443294525146, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "7", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0807648, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 3): 7 ()", + "module": "test", + "msecs": 80.7647705078125, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.7772312164307, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "7", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.080796, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 3): result = 7 ()", + "module": "test", + "msecs": 80.7960033416748, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.808464050293, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "7", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0808277, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 3 is correct (Content 7 and Type is ).", + "module": "test", + "msecs": 80.82771301269531, + "msg": "Submitted value number 3 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.8401737213135, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "10", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0808604, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 4): 10 ()", + "module": "test", + "msecs": 80.86037635803223, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.8728370666504, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "10", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0808954, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 4): result = 10 ()", + "module": "test", + "msecs": 80.89542388916016, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.9078845977783, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "10", + "" + ], + "asctime": "2019-12-27 08:39:31,080", + "created": 1577432371.0809278, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 4 is correct (Content 10 and Type is ).", + "module": "test", + "msecs": 80.92784881591797, + "msg": "Submitted value number 4 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.9403095245361, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 80.95860481262207, + "msg": "Execution of state machine callback (1) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1714.9710655212402, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.075599670410156e-05 + }, + { + "args": [], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0815182, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "report", + "levelname": "INFO", + "levelno": 20, + "lineno": 166, + "message": "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number", + "[ 2, 5, 8, 11 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0810165, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number): [ 2, 5, 8, 11 ] ()", + "module": "test", + "msecs": 81.01654052734375, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.029001235962, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number", + "[ 2, 5, 8, 11 ]", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0810544, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number): result = [ 2, 5, 8, 11 ] ()", + "module": "test", + "msecs": 81.0544490814209, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.066909790039, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0810895, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 1): 2 ()", + "module": "test", + "msecs": 81.08949661254883, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.101957321167, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 1", + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0811212, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 1): result = 2 ()", + "module": "test", + "msecs": 81.12120628356934, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.1336669921875, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.081154, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 1 is correct (Content 2 and Type is ).", + "module": "test", + "msecs": 81.15410804748535, + "msg": "Submitted value number 1 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.1665687561035, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0811872, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 2): 5 ()", + "module": "test", + "msecs": 81.18724822998047, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.1997089385986, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 2", + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0812187, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 2): result = 5 ()", + "module": "test", + "msecs": 81.21871948242188, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.23118019104, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "5", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.081251, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 2 is correct (Content 5 and Type is ).", + "module": "test", + "msecs": 81.25090599060059, + "msg": "Submitted value number 2 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.2633666992188, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "8", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0812833, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 3): 8 ()", + "module": "test", + "msecs": 81.2833309173584, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.2957916259766, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 3", + "8", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0813253, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 3): result = 8 ()", + "module": "test", + "msecs": 81.32529258728027, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.3377532958984, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "8", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0813575, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 3 is correct (Content 8 and Type is ).", + "module": "test", + "msecs": 81.35747909545898, + "msg": "Submitted value number 3 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.3699398040771, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "11", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0814104, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Submitted value number 4): 11 ()", + "module": "test", + "msecs": 81.41040802001953, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.4228687286377, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Submitted value number 4", + "11", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.081455, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Submitted value number 4): result = 11 ()", + "module": "test", + "msecs": 81.45499229431152, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.4674530029297, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "11", + "" + ], + "asctime": "2019-12-27 08:39:31,081", + "created": 1577432371.0814874, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Submitted value number 4 is correct (Content 11 and Type is ).", + "module": "test", + "msecs": 81.48741722106934, + "msg": "Submitted value number 4 is correct (Content %s and Type is %s).", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.4998779296875, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 81.51817321777344, + "msg": "Execution of state machine callback (2) (all_transitions, all_conditions) identified by a sequence number: Values and number of submitted values is correct. See detailed log for more information.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 1715.5306339263916, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.075599670410156e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0018534660339355469, + "time_finished": "2019-12-27 08:39:31,081", + "time_start": "2019-12-27 08:39:31,079" + }, + "_fE3tMHczEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4306138, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 29, + "message": "_fE3tMHczEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 430.61375617980957, + "msg": "_fE3tMHczEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.62621688842773, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4307377, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "timing", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 84, + "message": "Initialising state machine with state_a", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4306924, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 430.6924343109131, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.70489501953125, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.7377338409424, + "msg": "Initialising state machine with state_a", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.75019454956055, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.5299530029296875e-05 + }, + { + "args": [ + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.430853, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Initial state after Initialisation is correct (Content 'state_a' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4307847, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Initial state after Initialisation): 'state_a' ()", + "module": "test", + "msecs": 430.7847023010254, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.79716300964355, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Initial state after Initialisation", + "'state_a'", + "" + ], + "asctime": "2019-12-27 08:39:29,430", + "created": 1577432369.4308193, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Initial state after Initialisation): result = 'state_a' ()", + "module": "test", + "msecs": 430.8192729949951, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.83173370361328, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 430.85289001464844, + "msg": "Initial state after Initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 64.8653507232666, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.361701965332031e-05 + }, + { + "args": [ + 0.16 + ], + "asctime": "2019-12-27 08:39:29,581", + "created": 1577432369.5815747, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "timing", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 92, + "message": "Waiting for 0.160s or state change", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:29,581", + "created": 1577432369.5811167, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 581.1166763305664, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 215.12913703918457, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 581.5746784210205, + "msg": "Waiting for %.3fs or state change", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 215.58713912963867, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00045800209045410156 + }, + { + "args": [ + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:29,583", + "created": 1577432369.583144, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 1st cycle is correct (Content 'state_b' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 1st cycle", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:29,582", + "created": 1577432369.5826802, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 1st cycle): 'state_b' ()", + "module": "test", + "msecs": 582.6802253723145, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 216.69268608093262, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after 1st cycle", + "'state_b'", + "" + ], + "asctime": "2019-12-27 08:39:29,582", + "created": 1577432369.5829625, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 1st cycle): result = 'state_b' ()", + "module": "test", + "msecs": 582.9625129699707, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 216.97497367858887, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 583.143949508667, + "msg": "State after 1st cycle is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 217.15641021728516, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00018143653869628906 + }, + { + "args": [ + "0.15064692497253418", + "0.145", + "0.155", + "" + ], + "asctime": "2019-12-27 08:39:29,583", + "created": 1577432369.583695, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Transition time after 1st cycle is correct (Content 0.15064692497253418 in [0.145 ... 0.155] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Transition time after 1st cycle", + "0.15064692497253418", + "" + ], + "asctime": "2019-12-27 08:39:29,583", + "created": 1577432369.5833564, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Transition time after 1st cycle): 0.15064692497253418 ()", + "module": "test", + "msecs": 583.3563804626465, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 217.36884117126465, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Transition time after 1st cycle", + "0.145", + "0.155" + ], + "asctime": "2019-12-27 08:39:29,583", + "created": 1577432369.583534, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Transition time after 1st cycle): 0.145 <= result <= 0.155", + "module": "test", + "msecs": 583.5340023040771, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 217.5464630126953, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 583.6949348449707, + "msg": "Transition time after 1st cycle is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 217.70739555358887, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001609325408935547 + }, + { + "args": [ + 0.235 + ], + "asctime": "2019-12-27 08:39:29,809", + "created": 1577432369.809532, + "exc_info": null, + "exc_text": null, + "filename": "test_transitions.py", + "funcName": "timing", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 109, + "message": "Waiting for 0.235s or state change", + "module": "test_transitions", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'condition_true'", + "'state_b'", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,809", + "created": 1577432369.8090985, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_true'): 'state_b' -> 'state_c'", + "module": "__init__", + "msecs": 809.098482131958, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 443.1109428405762, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 809.5319271087646, + "msg": "Waiting for %.3fs or state change", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_transitions.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 443.5443878173828, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0004334449768066406 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,810", + "created": 1577432369.8101294, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after 2nd cycle is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after 2nd cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,809", + "created": 1577432369.8098202, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after 2nd cycle): 'state_c' ()", + "module": "test", + "msecs": 809.8201751708984, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 443.8326358795166, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after 2nd cycle", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,809", + "created": 1577432369.8099813, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after 2nd cycle): result = 'state_c' ()", + "module": "test", + "msecs": 809.9813461303711, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 443.99380683898926, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 810.1294040679932, + "msg": "State after 2nd cycle is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 444.1418647766113, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001480579376220703 + }, + { + "args": [ + "0.15042734146118164", + "0.145", + "0.155", + "" + ], + "asctime": "2019-12-27 08:39:29,810", + "created": 1577432369.8106217, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Transition time after 2nd cycle is correct (Content 0.15042734146118164 in [0.145 ... 0.155] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Transition time after 2nd cycle", + "0.15042734146118164", + "" + ], + "asctime": "2019-12-27 08:39:29,810", + "created": 1577432369.810326, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Transition time after 2nd cycle): 0.15042734146118164 ()", + "module": "test", + "msecs": 810.326099395752, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 444.3385601043701, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Transition time after 2nd cycle", + "0.145", + "0.155" + ], + "asctime": "2019-12-27 08:39:29,810", + "created": 1577432369.8104641, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Transition time after 2nd cycle): 0.145 <= result <= 0.155", + "module": "test", + "msecs": 810.4641437530518, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 444.4766044616699, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 810.6217384338379, + "msg": "Transition time after 2nd cycle is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 444.63419914245605, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001575946807861328 + }, + { + "args": [ + "0.22565054893493652", + "0.21999999999999997", + "0.22999999999999998", + "" + ], + "asctime": "2019-12-27 08:39:29,811", + "created": 1577432369.8111053, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Previous state duration is correct (Content 0.22565054893493652 in [0.21999999999999997 ... 0.22999999999999998] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Previous state duration", + "0.22565054893493652", + "" + ], + "asctime": "2019-12-27 08:39:29,810", + "created": 1577432369.810816, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Previous state duration): 0.22565054893493652 ()", + "module": "test", + "msecs": 810.8160495758057, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 444.8285102844238, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Previous state duration", + "0.21999999999999997", + "0.22999999999999998" + ], + "asctime": "2019-12-27 08:39:29,810", + "created": 1577432369.8109534, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Previous state duration): 0.21999999999999997 <= result <= 0.22999999999999998", + "module": "test", + "msecs": 810.9533786773682, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 444.9658393859863, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 811.1052513122559, + "msg": "Previous state duration is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 445.117712020874, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001518726348876953 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.3804914951324463, + "time_finished": "2019-12-27 08:39:29,811", + "time_start": "2019-12-27 08:39:29,430" + }, + "_iTFPQHcrEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4289916, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 25, + "message": "_iTFPQHcrEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 428.99155616760254, + "msg": "_iTFPQHcrEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.0040168762207, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4290895, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_keyword_arguments", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 36, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4290454, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 429.0454387664795, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.057899475097656, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.0895462036133, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.102006912231445, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.410743713378906e-05 + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429203, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_1 stored in state_machine is correct (Content 1 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_1 stored in state_machine", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429135, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_1 stored in state_machine): 1 ()", + "module": "test", + "msecs": 429.1350841522217, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.147544860839844, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_1 stored in state_machine", + "1", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4291694, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_1 stored in state_machine): result = 1 ()", + "module": "test", + "msecs": 429.1694164276123, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.18187713623047, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.2030334472656, + "msg": "Keyword argument kw_arg_no_1 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.21549415588379, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.361701965332031e-05 + }, + { + "args": [ + "'2'", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429316, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_2 stored in state_machine is correct (Content '2' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_2 stored in state_machine", + "'2'", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429247, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_2 stored in state_machine): '2' ()", + "module": "test", + "msecs": 429.2469024658203, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.25936317443848, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_2 stored in state_machine", + "'2'", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4292803, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_2 stored in state_machine): result = '2' ()", + "module": "test", + "msecs": 429.28028106689453, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.292741775512695, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.31604385375977, + "msg": "Keyword argument kw_arg_no_2 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.32850456237793, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.5762786865234375e-05 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4294817, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_3 stored in state_machine is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_3 stored in state_machine", + "True", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429364, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_3 stored in state_machine): True ()", + "module": "test", + "msecs": 429.3639659881592, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.376426696777344, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_3 stored in state_machine", + "True", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4294472, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_3 stored in state_machine): result = True ()", + "module": "test", + "msecs": 429.4471740722656, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.45963478088379, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.48174476623535, + "msg": "Keyword argument kw_arg_no_3 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.494205474853516, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.457069396972656e-05 + }, + { + "args": [ + "{'1': 1, '2': 'two'}", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4296174, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Keyword argument kw_arg_no_4 stored in state_machine is correct (Content {'1': 1, '2': 'two'} and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Keyword argument kw_arg_no_4 stored in state_machine", + "{ '1': 1, '2': 'two' }", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.429532, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Keyword argument kw_arg_no_4 stored in state_machine): { '1': 1, '2': 'two' } ()", + "module": "test", + "msecs": 429.5320510864258, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.544511795043945, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Keyword argument kw_arg_no_4 stored in state_machine", + "{ '1': 1, '2': 'two' }", + "" + ], + "asctime": "2019-12-27 08:39:29,429", + "created": 1577432369.4295723, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Keyword argument kw_arg_no_4 stored in state_machine): result = { '1': 1, '2': 'two' } ()", + "module": "test", + "msecs": 429.57234382629395, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.58480453491211, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 429.61740493774414, + "msg": "Keyword argument kw_arg_no_4 stored in state_machine is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 63.629865646362305, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.506111145019531e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0006258487701416016, + "time_finished": "2019-12-27 08:39:29,429", + "time_start": "2019-12-27 08:39:29,428" + }, + "_j2FvkHcqEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4284174, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 23, + "message": "_j2FvkHcqEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 428.417444229126, + "msg": "_j2FvkHcqEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.42990493774414, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4285176, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_last_transition", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 18, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4284754, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 428.47537994384766, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.48784065246582, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 428.51758003234863, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.5300407409668, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.220008850097656e-05 + }, + { + "args": [ + "'__init__'", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4286382, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Last transition condition after initialisation is correct (Content '__init__' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Last transition condition after initialisation", + "'__init__'", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4285643, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Last transition condition after initialisation): '__init__' ()", + "module": "test", + "msecs": 428.56431007385254, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.5767707824707, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Last transition condition after initialisation", + "'__init__'", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4286032, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Last transition condition after initialisation): result = '__init__' ()", + "module": "test", + "msecs": 428.6031723022461, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.61563301086426, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 428.638219833374, + "msg": "Last transition condition after initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.65068054199219, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 3.504753112792969e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00022077560424804688, + "time_finished": "2019-12-27 08:39:29,428", + "time_start": "2019-12-27 08:39:29,428" + }, + "_tRZ50HcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,055", + "created": 1577432370.0555599, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 33, + "message": "_tRZ50HcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 55.55987358093262, + "msg": "_tRZ50HcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 689.5723342895508, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,055", + "created": 1577432370.0559556, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 16, + "message": "Initialising the state machine with state_c", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:30,055", + "created": 1577432370.0557823, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 55.782318115234375, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 689.7947788238525, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 55.95564842224121, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 689.9681091308594, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00017333030700683594 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:30,056", + "created": 1577432370.0563927, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of this_state() is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of this_state()", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:30,056", + "created": 1577432370.0561318, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of this_state()): 'state_c' ()", + "module": "test", + "msecs": 56.131839752197266, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 690.1443004608154, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of this_state()", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:30,056", + "created": 1577432370.056263, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of this_state()): result = 'state_c' ()", + "module": "test", + "msecs": 56.262969970703125, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 690.2754306793213, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 56.392669677734375, + "msg": "Returnvalue of this_state() is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 690.4051303863525, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00012969970703125 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0008327960968017578, + "time_finished": "2019-12-27 08:39:30,056", + "time_start": "2019-12-27 08:39:30,055" + }, + "_vAtUQHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,056", + "created": 1577432370.0566595, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 34, + "message": "_vAtUQHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 56.65946006774902, + "msg": "_vAtUQHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 690.6719207763672, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.0570261, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state_is", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Initialising the state machine with state_c", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:30,056", + "created": 1577432370.0568738, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 56.87379837036133, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 690.8862590789795, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 57.02614784240723, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.0386085510254, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00015234947204589844 + }, + { + "args": [ + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.0575268, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of this_state_is(state_c) is correct (Content True and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of this_state_is(state_c)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.0572124, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of this_state_is(state_c)): True ()", + "module": "test", + "msecs": 57.21235275268555, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.2248134613037, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of this_state_is(state_c)", + "True", + "" + ], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.0573523, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of this_state_is(state_c)): result = True ()", + "module": "test", + "msecs": 57.352304458618164, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.3647651672363, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 57.52682685852051, + "msg": "Returnvalue of this_state_is(state_c) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.5392875671387, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00017452239990234375 + }, + { + "args": [ + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.057946, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of this_state_is(state_b) is correct (Content False and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of this_state_is(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.0576987, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of this_state_is(state_b)): False ()", + "module": "test", + "msecs": 57.698726654052734, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.7111873626709, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of this_state_is(state_b)", + "False", + "" + ], + "asctime": "2019-12-27 08:39:30,057", + "created": 1577432370.0578227, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of this_state_is(state_b)): result = False ()", + "module": "test", + "msecs": 57.82270431518555, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.8351650238037, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 57.945966720581055, + "msg": "Returnvalue of this_state_is(state_b) is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 691.9584274291992, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0001232624053955078 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0012865066528320312, + "time_finished": "2019-12-27 08:39:30,057", + "time_start": "2019-12-27 08:39:30,056" + }, + "_w49d4HcHEem_Z9BBpwIuJw": { + "args": null, + "asctime": "2019-12-27 08:39:29,427", + "created": 1577432369.4279351, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 22, + "message": "_w49d4HcHEem_Z9BBpwIuJw", + "module": "__init__", + "moduleLogger": [], + "msecs": 427.9351234436035, + "msg": "_w49d4HcHEem_Z9BBpwIuJw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 61.94758415222168, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4281826, + "exc_info": null, + "exc_text": null, + "filename": "test_init.py", + "funcName": "test_init_state", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 12, + "message": "Initialising the state machine with state_c", + "module": "test_init", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_c'" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4281175, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_c'", + "module": "__init__", + "msecs": 428.1175136566162, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.129974365234375, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 428.18260192871094, + "msg": "Initialising the state machine with state_c", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_init.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.1950626373291, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 6.508827209472656e-05 + }, + { + "args": [ + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4283307, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after initialisation is correct (Content 'state_c' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after initialisation", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4282458, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after initialisation): 'state_c' ()", + "module": "test", + "msecs": 428.24578285217285, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.258243560791016, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "State after initialisation", + "'state_c'", + "" + ], + "asctime": "2019-12-27 08:39:29,428", + "created": 1577432369.4282875, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after initialisation): result = 'state_c' ()", + "module": "test", + "msecs": 428.2875061035156, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.29996681213379, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 428.330659866333, + "msg": "State after initialisation is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 62.34312057495117, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 4.315376281738281e-05 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0003955364227294922, + "time_finished": "2019-12-27 08:39:29,428", + "time_start": "2019-12-27 08:39:29,427" + }, + "_yVA9oHcyEemrUqotql_Blw": { + "args": null, + "asctime": "2019-12-27 08:39:30,058", + "created": 1577432370.0582132, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 35, + "message": "_yVA9oHcyEemrUqotql_Blw", + "module": "__init__", + "moduleLogger": [], + "msecs": 58.213233947753906, + "msg": "_yVA9oHcyEemrUqotql_Blw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 692.2256946563721, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-27 08:39:30,309", + "created": 1577432370.3094988, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 34, + "message": "Running state machine test sequence.", + "module": "test_interface", + "moduleLogger": [ + { + "args": [ + "StateMachine:", + "'__init__'", + "None", + "'state_a'" + ], + "asctime": "2019-12-27 08:39:30,058", + "created": 1577432370.0584168, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('__init__'): None -> 'state_a'", + "module": "__init__", + "msecs": 58.41684341430664, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 692.4293041229248, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "StateMachine:", + "'condition_a'", + "'state_a'", + "'state_b'" + ], + "asctime": "2019-12-27 08:39:30,058", + "created": 1577432370.0586488, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "__set_state__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 174, + "message": "StateMachine: State change ('condition_a'): 'state_a' -> 'state_b'", + "module": "__init__", + "msecs": 58.64882469177246, + "msg": "%s State change (%s): %s -> %s", + "name": "STATE_MACHINE", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/state_machine/__init__.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 692.6612854003906, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + 0.25 + ], + "asctime": "2019-12-27 08:39:30,309", + "created": 1577432370.3091664, + "exc_info": null, + "exc_text": null, + "filename": "test_interface.py", + "funcName": "test_this_state_duration", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 33, + "message": "Waiting for 0.25s", + "module": "test_interface", + "msecs": 309.16643142700195, + "msg": "Waiting for %.2fs", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 943.1788921356201, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 309.49878692626953, + "msg": "Running state machine test sequence.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/tests/test_interface.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 943.5112476348877, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.0003323554992675781 + }, + { + "args": [ + "0.25096559524536133", + "0.2", + "0.3", + "" + ], + "asctime": "2019-12-27 08:39:30,310", + "created": 1577432370.3101196, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "range_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 218, + "message": "Return Value of this_state_duration() is correct (Content 0.25096559524536133 in [0.2 ... 0.3] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return Value of this_state_duration()", + "0.25096559524536133", + "" + ], + "asctime": "2019-12-27 08:39:30,309", + "created": 1577432370.3097856, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return Value of this_state_duration()): 0.25096559524536133 ()", + "module": "test", + "msecs": 309.7856044769287, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 943.7980651855469, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + }, + { + "args": [ + "Return Value of this_state_duration()", + "0.2", + "0.3" + ], + "asctime": "2019-12-27 08:39:30,309", + "created": 1577432370.3099647, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_range__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 30, + "message": "Expectation (Return Value of this_state_duration()): 0.2 <= result <= 0.3", + "module": "test", + "msecs": 309.964656829834, + "msg": "Expectation (%s): %s <= result <= %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 943.9771175384521, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread" + } + ], + "msecs": 310.11962890625, + "msg": "Return Value of this_state_duration() is correct (Content %s in [%s ... %s] and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/state_machine/unittest/src/unittest/test.py", + "process": 8624, + "processName": "MainProcess", + "relativeCreated": 944.1320896148682, + "stack_info": null, + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.00015497207641601562 + } + ], + "thread": 140234569094976, + "threadName": "MainThread", + "time_consumption": 0.2519063949584961, + "time_finished": "2019-12-27 08:39:30,310", + "time_start": "2019-12-27 08:39:30,058" + } + }, + "testrun_id": "p3", + "time_consumption": 1.649573802947998, + "uid_list_sorted": [ + "_w49d4HcHEem_Z9BBpwIuJw", + "_j2FvkHcqEemrUqotql_Blw", + "_bDqbMHcrEemrUqotql_Blw", + "_iTFPQHcrEemrUqotql_Blw", + "_P7R34HczEemrUqotql_Blw", + "_fE3tMHczEemrUqotql_Blw", + "_C0Vi0HgPEemBsuKWG645TA", + "_tRZ50HcyEemrUqotql_Blw", + "_vAtUQHcyEemrUqotql_Blw", + "_yVA9oHcyEemrUqotql_Blw", + "_1WGwEHcyEemrUqotql_Blw", + "_7Mq60HcyEemrUqotql_Blw", + "_-kytMHcyEemrUqotql_Blw", + "_AcYg8HczEemrUqotql_Blw", + "_GeMSYHczEemrUqotql_Blw", + "_XzMFcHYZEem_kd-7nxt1sg", + "_YrdgQHbUEemIm_1APUisDQ", + "_b_t78Hb4EemzkK7kGUMNfw", + "_e4QPUHb4EemzkK7kGUMNfw" + ] + } + ], + "unittest_information": { + "Version": "11a793890aa5d8a2bdad647cbefcc716" + } +} \ No newline at end of file diff --git a/_testresults_/unittest.pdf b/_testresults_/unittest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..407b2b15f3def3f7cedb1e6632a4d1f62c077466 GIT binary patch literal 290299 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 DZ_z%# literal 0 HcmV?d00001